日期:2014-05-16  浏览次数:20885 次

有关静态库libc_nonshared.a里__fini_array_end'找不到的问题
RT,小弟最近在交叉编译DBUS,好不容易把./configure通过了,产生了MAKEFILE文件,没想在make的时候又碰到个问题,错误如下:
C/C++ code
make[2]: Entering directory `/home/gfs/study/dbus/dbus-1.2.24/bus'
  CCLD   dbus-daemon
/opt/crosstool/arm-linux/gcc-3.4.4-glibc-2.3.5/arm-linux/lib/gcc/arm-linux/3.4.4                                                                                                 /../../../../arm-linux/bin/ld: Warning: gc-sections option ignored
bus.o: In function `process_config_postinit':
/opt/crosstool/arm-linux/gcc-3.4.4-glibc-2.3.5/arm-linux/lib/gcc/arm-linux/3.4.4                                                                                                 /../../../../arm-linux/lib/libc_nonshared.a(elf-init.oST): In function `__libc_c                                                                                                 su_init':
elf-init.c:(.text+0x5c): undefined reference to `__init_array_end'
elf-init.c:(.text+0x60): undefined reference to `__init_array_start'
/opt/crosstool/arm-linux/gcc-3.4.4-glibc-2.3.5/arm-linux/lib/gcc/arm-linux/3.4.4                                                                                                 /../../../../arm-linux/lib/libc_nonshared.a(elf-init.oST): In function `__libc_c                                                                                                 su_fini':
elf-init.c:(.text+0xbc): undefined reference to `__fini_array_end'
elf-init.c:(.text+0xc0): undefined reference to `__fini_array_start'
collect2: ld returned 1 exit status
make[2]: *** [dbus-daemon] Error 1
make[2]: Leaving directory `/home/gfs/study/dbus/dbus-1.2.24/bus'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/gfs/study/dbus/dbus-1.2.24'
make: *** [all] Error 2



网上有人说把makefile里的-Wall选项改为-shared就可以了,我也改了,
C/C++ code
     CFLAGS = -ffunction-sections -fdata-sections -g -O2 -Wall -Wchar-subscripts -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wcast-align -Wf        loat-equal -Wdeclaration-after-statement -fno-common -Wno-unused -Wno-sign-compare -fno-strict-aliasing



改成
C/C++ code
     CFLAGS = -ffunction-sections -fdata-sections -g -O2 -shared -Wchar-subscripts -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wcast-align -Wf        loat-equal -Wdeclaration-after-statement -fno-common -Wno-unused -Wno-sign-compare -fno-strict-aliasing




整个MAKEFILE就这一句有-Wall的,还是一样的错误..哪里有问题呢,高手指教,郁闷死了..搞了好几天了

------解决方案--------------------
这是链接时候的错误,不是编译的错误。

你的链接的命令行是什么?
------解决方案--------------------
没做过,所以不知道怎么办。帮你分析下啊,一般
undefined reference to `__init_array_end'是缺少库,makefile里加上对应库就行了。至于你说的“makefile里的-Wall选项改为-shared”,肯定是不行的,-Wall是输出警告,-shared 是编译成动态库,不知道为什么这么改。
建议,configure --help 看看有啥设置你弄错了没。还是要等做过的人来帮你。
------解决方案--------------------
试试这几个参数:-Wl,-static -lstdc++ -static-libgc
------解决方案--------------------
我现在也遇到了这样的问题,纠结了好几天了,都不知道是什么回事,你还解决了?