当我构建为静态库时,源代码使用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
有关如何解决此错误的想法吗?
提前致谢。 问候, 洁
答案 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