版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leishengsheng/article/details/79723809
前提
- 编译器为 雄迈提供的 arm, 基于 4.4.1 版本
- 编译 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
- 各种查找无果
解决方案
查找 stackoverflow
有说,是此函数 __sync_fetch_and_add_4
是 gcc 的内联函数,不对外显露,编译时会找不到,但这是 gcc 内置的功能,如果出错,则是 gcc 的不支持。
于是找到这文章(见参考),下载 gcc-4.6.0 的 linux-atomic.c
修改 33
行的 属性 hidden
为 default
,再用文章中的脚本编译出静态库,再在编译时链接这个库,编译成功。
fixlowgcc 这里放置了相关文件和源码