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

我为链接器提供了我的文件: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 

我发现了怎么做:

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

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

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

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

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

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

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

 gcc -ldl program.c -o program 

您通常不必显式链接“libc”或“crt1.o”。