Bug:__uClibc_main.c:(.text+0x20): undefined reference to `__fini_array_start'问题的解决
2015-09-28 17:17
671 查看
今天碰到了一个问题:
__uClibc_main.c:(.text+0x20): undefined reference to `__fini_array_start'
__uClibc_main.c:(.text+0x24): undefined reference to `__fini_array_end'
/opt/toolchains/uclibc-crosstools-gcc-4.3.4/usr/lib/libc.a(__uClibc_main.os): In function `__uClibc_main':
__uClibc_main.c:(.text+0x398): undefined reference to `__preinit_array_start'
__uClibc_main.c:(.text+0x39c): undefined reference to `__preinit_array_end'
__uClibc_main.c:(.text+0x3f4): undefined reference to `__init_array_start'
__uClibc_main.c:(.text+0x3f8): undefined reference to `__init_array_end'
/opt/toolchains/uclibc-crosstools-gcc-4.3.4/usr/bin/../lib/gcc/mips-linux-uclibc/4.3.4/../../../../mips-linux-uclibc/bin/ld: uclibc/libc.so.0-so: hidden symbol `__fini_array_end' isn't defined
/opt/toolchains/uclibc-crosstools-gcc-4.3.4/usr/bin/../lib/gcc/mips-linux-uclibc/4.3.4/../../../../mips-linux-uclibc/bin/ld: final link failed: Nonrepresentable section on output
在编译库的过程中,发现如果编译静态库.a库,没有任何问题。但是只要编译连接.so动态库,就会出现上述问题。
1.由于这个对比差异,所以加了gcc -v的选项,想看下中间过程,不过还是没有看到明确信息。
2.然后查了网上很多资料,都没有一个明确答案,有的说是把编译选项中的“-Wall”改成"-shared"就好了。但是一个是告警的一个是编译链接用的选项,不应该啊。百思不得其解,还是试了一把,问题仍然没有解决。stackflow上也没有合适的结果。
3.后来想是不是环境问题,因为有老外因为这个类似的问题竟然去回退gcc版本。所以我想先试试简单例子好了,用交叉工具链编译链接了一个helloworld的小程序,是ok的,直接链接成.so也ok。
4.那说明还是编译选项的问题。
仔细查找了可能添加编译选项的地方,发现在一个可能include的配置文件中,链接选项里竟然加了一个-static,顿时有种抓狂的感觉。
然后拿之前hellworld,加上-static验证了下,果然加上就会有这个错误。
5.最后验证,在配置文件中将static选项删掉,编译ok,问题解决。
__uClibc_main.c:(.text+0x20): undefined reference to `__fini_array_start'
__uClibc_main.c:(.text+0x24): undefined reference to `__fini_array_end'
/opt/toolchains/uclibc-crosstools-gcc-4.3.4/usr/lib/libc.a(__uClibc_main.os): In function `__uClibc_main':
__uClibc_main.c:(.text+0x398): undefined reference to `__preinit_array_start'
__uClibc_main.c:(.text+0x39c): undefined reference to `__preinit_array_end'
__uClibc_main.c:(.text+0x3f4): undefined reference to `__init_array_start'
__uClibc_main.c:(.text+0x3f8): undefined reference to `__init_array_end'
/opt/toolchains/uclibc-crosstools-gcc-4.3.4/usr/bin/../lib/gcc/mips-linux-uclibc/4.3.4/../../../../mips-linux-uclibc/bin/ld: uclibc/libc.so.0-so: hidden symbol `__fini_array_end' isn't defined
/opt/toolchains/uclibc-crosstools-gcc-4.3.4/usr/bin/../lib/gcc/mips-linux-uclibc/4.3.4/../../../../mips-linux-uclibc/bin/ld: final link failed: Nonrepresentable section on output
在编译库的过程中,发现如果编译静态库.a库,没有任何问题。但是只要编译连接.so动态库,就会出现上述问题。
1.由于这个对比差异,所以加了gcc -v的选项,想看下中间过程,不过还是没有看到明确信息。
2.然后查了网上很多资料,都没有一个明确答案,有的说是把编译选项中的“-Wall”改成"-shared"就好了。但是一个是告警的一个是编译链接用的选项,不应该啊。百思不得其解,还是试了一把,问题仍然没有解决。stackflow上也没有合适的结果。
3.后来想是不是环境问题,因为有老外因为这个类似的问题竟然去回退gcc版本。所以我想先试试简单例子好了,用交叉工具链编译链接了一个helloworld的小程序,是ok的,直接链接成.so也ok。
4.那说明还是编译选项的问题。
仔细查找了可能添加编译选项的地方,发现在一个可能include的配置文件中,链接选项里竟然加了一个-static,顿时有种抓狂的感觉。
然后拿之前hellworld,加上-static验证了下,果然加上就会有这个错误。
5.最后验证,在配置文件中将static选项删掉,编译ok,问题解决。
相关文章推荐
- js 小知识
- ReactJS
- HDU 5491 The next(2015 ACM/ICPC Asia Regional Hefei Online )(贪心)
- Windows 2012 IT Professional——AD FS with SharePoint 2013 联合部署
- JQuery实现左右滚动菜单特效
- ReactJs之render
- jQuery 焦点图,图像文件js档
- HTML初步学习3
- AngularJs学习笔记一
- JS中语句使用的注意事项
- Improved Noise reference implementation
- js+jquery检测用户浏览器型号(转)
- bootStrap实现tab页切换
- 剑指offer习题2
- AngularJs学习笔记二
- CSS使用图片美化的漂亮菜单效果
- ReactiveCocoa & MVVM 学习总结一
- Js-利用js实现文本框默认获取输入焦点
- 百度前端笔试题整体(2013年及之前的)
- ReactJs之表单处理