您的位置:首页 > Web前端

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,问题解决。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: