Android OpenCV共享库构建错误

时间:2013-04-29 15:00:58

标签: android opencv makefile shared-libraries

当我构建为静态库时,源代码使用mm command在Android JellyBean 4.1.2中很好地构建。但是,当我尝试将android/external/opencv下的opencv文件夹构建为静态库时,在android/external/opencv/Android.mk

中进行了以下更改
+ LOCAL_SHARED_LIBRARIES+= libdl

- include $(BUILD_STATIC_LIBRARY)
+ include $(BUILD_SHARED_LIBRARY)

- LOCAL_STATIC_LIBRARIES := libcxcore libcv libcvaux libcvml libcvhighgui
+ LOCAL_SHARED_LIBRARIES := libcxcore libcv libcvaux libcvml libcvhighgui

我收到以下错误:

android/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.6/bin/../lib/gcc/arm-linux-androideabi/4.6.x-google/../../../../arm-linux-androideabi/bin/ld: internal error in thumb_branch_common, at /tmp/android-8532/src/build/../binutils/binutils-2.21/gold/arm.cc:4148
collect2: ld returned 1 exit status
make: *** [out/target/product/mydevice/obj/SHARED_LIBRARIES/libcxcore_intermediates/LINKED/libcxcore.so] Error 1

有关如何解决此错误的想法吗?

提前致谢。 问候, 洁

1 个答案:

答案 0 :(得分:2)

  

,,, arm-linux-androideabi / bin / ld:thumb_branch_common中的内部错误,   at /tmp/android-8532/src/build/../binutils/binutils-2.21/gold/arm.cc:4148   collect2:ld返回1退出状态

     

有关如何解决此错误的想法吗?

在Binutils中,文件arm.cc,第4148行有一个内部错误(在Binutils中)。

尝试较新的Binutils(或更早版本)或修复Bug并提交补丁。

您还可以切换到不同的工具链(使用不同的Binutils)和 试试看。有时编译器开关会改变操作以避免 臭虫。

有一个简单地改变源文件中函数顺序的机会 你正在编译的代码(不是gold / arm.cc,这是编译器Bug的地方, 改变你的来源)并且Binutils将以不同的方式读取新订购的代码 从而避免了Binutils Bug。

您链接的代码(.o文件)也可能已损坏 无论是在磁盘上还是在编译器中的Bug,或者它是用于错误的端序 (等)并且没有被检测到。

PS:Thumb-2代码(在编译器的工具链中)不是没有错误的(正如你所注意到的)。

有关修复工作的人员,请参阅此处: http://git.openembedded.org/openembedded-core-contrib/commit/?h=kraj/gold&id=b72f3238ad32ab420306a0226d8c2e57c52ddf45

......这就是他们想出来的: http://sourceware.org/bugzilla/attachment.cgi?id=6284&action=diff