有关交叉编译的一个错误

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leishengsheng/article/details/79723809

前提

  1. 编译器为 雄迈提供的 arm, 基于 4.4.1 版本
  2. 编译 opencv-3.1.0, 库可以编译成功,但是编译二进制会出错,出错 提示如下
/opt/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/bin/ld: fd: hidden symbol `__sync_fetch_and_add_4' in /opt/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/libgcc.a(linux-atomic.o) is referenced by DSO
/opt/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/bin/ld: final link failed: Nonrepresentable section on output
  1. 各种查找无果

解决方案

查找 stackoverflow 有说,是此函数 __sync_fetch_and_add_4 是 gcc 的内联函数,不对外显露,编译时会找不到,但这是 gcc 内置的功能,如果出错,则是 gcc 的不支持。

于是找到这文章(见参考),下载 gcc-4.6.0 的 linux-atomic.c 修改 33 行的 属性 hiddendefault,再用文章中的脚本编译出静态库,再在编译时链接这个库,编译成功。

fixlowgcc 这里放置了相关文件和源码

参考

fix

猜你喜欢

转载自blog.csdn.net/leishengsheng/article/details/79723809