В настоящее время я пытаюсь скомпилировать собственный код для 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: отлаживать в своем манифесте каждый раз, когда я хочу скомпилировать. Я даже не уверен, что все в порядке, если я просто установлю андроид: отлаживаем до компиляции с фальшивым предварительным компиляцией и компиляции истинного сообщения, но я уверен, что забуду это каждый второй запуск.
Неужели кто-нибудь сталкивался с подобной проблемой или кто-нибудь знает, как это исправить? Это было бы большой помощью.
Я могу подтвердить, что мои инициализации NEON правильно скомпилированы с ndk-build NDK_DEBUG = 0. В моем случае вместо того, чтобы использовать готовые, было проще #define ANDROID_GCC_NEON_BUG! NDEBUG, и я обертываю каждое определение функции эквивалентом #if CPU_HAS_NEON &&! ANDROID_GCC_NEON_BUG ... –
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 –