GCC -nostdlib失败,未定义引用`__libc_csu_fini'

时间:2010-11-04 16:44:14

标签: c gcc

我为链接器提供了我的文件:ld-2.7.so,libc-2.7.so和crt1.o但是无法成功编译。是否可以链接到默认的glibc?

(静态编译或安装单独的glibc不是一种选择。)

gcc -Wl,-dynamic-linker,ld-2.7.so,libc-2.7.so,crt1.o -nostdlib program.c

crt1.o: In function `_start':  
(.text+0x12): undefined reference to `__libc_csu_fini'  
crt1.o: In function `_start':  
(.text+0x19): undefined reference to `__libc_csu_init'  
/tmp/user/1000/ccauFlwt.o: In function `findsize':  
program.c:(.text+0x21): undefined reference to `stat'  
/tmp/user/1000/ccauFlwt.o: In function `findtime':  
program.c:(.text+0x4c): undefined reference to `stat'  
collect2: ld returned 1 exit status  

3 个答案:

答案 0 :(得分:2)

我发现了怎么做:

rpath指定提供的库所在的位置。该文件夹应包含:libc.so.6,libdl.so.2,libgcc_s.so.1等等。检查strace以找出二进制文件使用的库。

ld.so是提供的链接器

gcc -Xlinker -rpath = / default / path / to / libraries -Xlinker -I / default / path / to / libraries / ld.so program.c

答案 1 :(得分:1)

正如@onemasse所说,你还需要与该版本的libc兼容的头文件。在glibc版本之间,事情仍然有效,但这不能依赖。

否则,我建议您在启动新库之前使用export LD_PRELOAD_PATH到其他libc的任何位置。

但你真正想要的是在Linux中进行交叉编译,对于linux,还有另一个libc。 看看crosstool

答案 2 :(得分:0)

如果要链接到系统提供的libc以外的其他libc,还需要使用与该版本的libc兼容的头文件编译程序。

另外,我不熟悉“-dynamic-linker”选项。它不在gcc的手册页中。我真的无法解决你想要做的事情。

也许你应该尝试这个并从那里开始工作:

gcc -ldl program.c -o program

您通常不必明确链接“libc”或“crt1.o”。