我目前正在尝试为Android编译本地代码。这段代码来自于OpenCV针对Android的移植版本。我已经正确地将所有代码粘贴到我的项目中,并相应地编辑了我的make文件。当我将android:debuggable设置为false时,一切都正常工作,我可以得到我的本地库。但是当我将android:debuggable设置为true时,就会出现错误。以下是日志的一部分:
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
来避免此问题。我已经尝试了两种方法,但仍然出现了错误。现在我并不太关心调试本机代码,但我希望启用基本调试功能。我不想每次编译时都切换manifest中的android:debuggable。我甚至不确定如果我只是在编译前将android:debuggable设置为false,然后在编译后将其设置为true是否可以,但我肯定会忘记它的。
有没有人遇到类似的问题或知道如何解决?这将是一个很大的帮助。