2013-04-29 99 views
0

当我构建为静态库时,源代码使用mm command在Android JellyBean 4.1.2中生成良好。但是,当我尝试建立OpenCV的文件夹下android/external/opencv静态库,有以下变化android/external/opencv/Android.mkAndroid OpenCV共享库生成错误

+ 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 

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

在此先感谢。 问候, 洁

回答

2

,,, 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

Any idea on how to fix this error?

在Binutils的,文件arm.cc,4148线有一个内部错误(在Binutils的)。

尝试更新的Binutils(或更旧)或修复Bug并提交修补程序。

您也可以切换到不同的工具链(使用不同的Binutils)和 试试。有时候,编译器开关会改变操作,以至于不能使用这个Bug。

有机会的话,简单地改变功能的顺序代码的源文件 正在编译(不是黄金/ 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