Как узнать уровень оптимизации gcc для ndk-build - PullRequest
4 голосов
/ 07 февраля 2012

Я писал какой-то нативный код на Android, используя NDK (jni).Я хочу отключить оптимизацию компилятора gcc.Пока я добавляю LOCAL_CFLAGS += -O0 в Android.mk, я не уверен, работает ли он.

Я написал некоторый код для проверки издержек цикла, например:

// gettime
for(int i = 0 ; i<10000;i++)
{

}
// gettime

разница во времени слишком мала, поэтому я уверен, что этот цикл был удален компилятором.Я могу изменить i на переменную, но я хочу проверить, правильно ли я выключил оптимизацию компилятора.

Как узнать уровень оптимизации, используемый gcc (ndk-build),Могу ли я установить make для подробного получения всех сообщений?

Заранее спасибо.

Ответы [ 2 ]

8 голосов
/ 07 февраля 2012

Смотрите здесь, как отключить оптимизацию: Проблемы Android NDK assert.h

В основном вам нужно добавить

APP_OPTIM := debug

в ваше приложение.тк файл

6 голосов
/ 07 февраля 2012

Компилятор определяет макрос с именем __OPTIMIZE__, когда включена оптимизация.

Если вы вставите эти строки в любой файл C, компиляция завершится неудачно, если ваши флаги make не сработали для этого файла.

#ifdef __OPTIMIZE__
#error Optimization enabled. That's not right!
#endif

Другой возможностью является проверка специфичных для арки флагов во встроенном двоичном файле (.o или исполняемый файл).

readelf -A myfile.o

В ARM есть флаг, указывающий уровень оптимизации,но я думаю, что инструментарий Android может быть немного старым, чтобы правильно его использовать, поэтому YMMV.

...