Я использую Rice , чтобы написать расширение C ++ для драгоценного камня Ruby. Расширение имеет форму файла общего объекта (.so).
Для этого требуется «mkmf-rice» вместо «mkmf», но оба (AFAIK) очень похожи.
По умолчанию компилятор использует флаги -g -O2
. Лично я нахожу этот вид глупым, поскольку его трудно отлаживать при любой включенной оптимизации. Я прибег к редактированию Makefile, чтобы убрать ненужные мне флаги (например, удалить -fPIC -shared
, когда мне нужно отладить, используя main()
вместо хуков Ruby).
Но я полагаю, что должен быть лучший путь. Я знаю, что могу просто сделать
$CPPFLAGS += " -DRICE"
для добавления дополнительных флагов. Но как мне удалить вещи, не редактируя Makefile напрямую?
Вторичный вопрос: какие оптимизации безопасны для общих объектов, загружаемых Ruby? Могу ли я сделать что-то вроде -funroll-loops
? Что вы все рекомендуете?
Это научный вычислительный проект, поэтому чем быстрее, тем лучше. Память не является большой проблемой.
Большое спасибо!