2010-08-09 3 views
3

В настоящее время я пытаюсь скомпилировать собственный код для Android. Код из порта OpenCV для Android. Я правильно вложил весь код в свой проект и соответствующим образом отредактировал свои файлы. Когда я устанавливаю android: debuggable to false, все работает нормально, и я получаю свою собственную библиотеку. Когда я пытаюсь в android: debuggable установлен в true, я получаю сообщение об ошибке. Вот часть журнала:Ошибка внутреннего компилятора при компиляции собственного кода Android

Compile++ thumb: cxcore <= AR_Still_Image/jni/cxcore/src/cxutils.cpp 
AR_Still_Image/jni/cxcore/src/cxutils.cpp: In function 'void icvSort16u(ushort*, size_t, int)': 
AR_Still_Image/jni/cxcore/src/cxutils.cpp:987: internal compiler error: in reload, at reload1.c:1173 
Please submit a full bug report, 
with preprocessed source if appropriate. 
See <http://gcc.gnu.org/bugs.html> for instructions. 
make: *** [AR_Still_Image/obj/local/armeabi/objs/cxcore/cxcore/src/cxutils.o] Error 1 

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

Теперь, по-видимому, этого можно избежать, установив APP-OPTIM := release в Application.mk или добавив -O2 в LOCAL_CFLAGS. Я попробовал оба, и все-таки получаю эту ошибку.

Прямо сейчас мне не очень-то интересно об отладке моего родного кода, но я бы хотел, чтобы была включена базовая отладка. И я не хочу продолжать переключать Android: отлаживать в своем манифесте каждый раз, когда я хочу скомпилировать. Я даже не уверен, что все в порядке, если я просто установлю андроид: отлаживаем до компиляции с фальшивым предварительным компиляцией и компиляции истинного сообщения, но я уверен, что забуду это каждый второй запуск.

Неужели кто-нибудь сталкивался с подобной проблемой или кто-нибудь знает, как это исправить? Это было бы большой помощью.

ответ

2

Обходным способом является предварительная сборка кода, вызывающая ошибку компилятора при отладке. Затем принесите его как готовое. Затем вы можете построить остальные с помощью отладки. У меня была эта проблема (или аналогичная) и размещена на Google Group.

Ссылка на раздел Prebuilts руководства Dev.

+0

Я могу подтвердить, что мои инициализации NEON правильно скомпилированы с ndk-build NDK_DEBUG = 0. В моем случае вместо того, чтобы использовать готовые, было проще #define ANDROID_GCC_NEON_BUG! NDEBUG, и я обертываю каждое определение функции эквивалентом #if CPU_HAS_NEON &&! ANDROID_GCC_NEON_BUG ... –

+0

BTW, мое решение работает на ndk r7b (gcc 4.4. Икс). Вот еще информация, и мучительная идея о том, что gcc 4.6.2 имеет исправление вверх по течению. http://grokbase.com/t/gg/android-ndk/11bw65h5sf/internal-compiler-error-in-reload-cse-simplify-operands-at-postreload-c-396-with-neon-intrinsics-in- НДК-7 –

Смежные вопросы