當前我正在嘗試編譯Android本機代碼。代碼來自Android的OpenCV端口。我在項目中正確粘貼了所有代碼,並相應地編輯了我的make文件。當我把android:debuggable設置爲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
從我在互聯網上發現這是由編譯的優化級別引起的。只要代碼沒有編譯,以致於事後可調試,一切都應該沒問題。
現在顯然可以通過在Application.mk中設置APP-OPTIM := release
或將-O2
添加到LOCAL_CFLAGS
來避免這種情況。我已經嘗試過,但仍然出現此錯誤。
現在我不太在乎調試我的本機代碼,但我想要啓用基本的調試。我不想在每次我想編譯時在我的清單中繼續切換android:debuggable。我甚至不確定是否可以,如果我只是將android:debuggable設置爲虛假預編譯和真正的後編譯,但我相信我會在每次運行時都會忘記它。
有沒有人遇到類似的問題或沒有人知道如何解決這個問題?這將是一個很大的幫助。
我可以確認我的NEON內在函數使用ndk-build NDK_DEBUG = 0正確編譯。在我的情況下,而不是使用預構建,更容易#定義ANDROID_GCC_NEON_BUG!NDEBUG,並且我將每個函數定義與#if CPU_HAS_NEON &&!ANDROID_GCC_NEON_BUG ... – 2012-02-21 23:06:44
等效#wrap80,我的解決方案適用於ndk r7b(gcc 4.4。 X)。這裏有一些更多的信息,以及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- NDK-7 – 2012-02-22 00:19:55