【发布时间】:2010-11-04 16:44:13
【问题描述】:
我向链接器提供了我的文件:ld-2.7.so、libc-2.7.so 和 crt1.o,但它未能成功编译。是否可以链接到与默认 glibc 不同的 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
【问题讨论】:
-
在黑暗中刺探:您可以尝试在命令行中列出两次库:
-Wl,-dynamic-linker,ld-2.7.so,libc-2.7.so,crt1.o,ld-2.7.so,libc-2.7.so,crt1.o。 -
__libc_csu_init和fini可能是其他crt*.o文件中的一些 C++ 构造函数/析构函数垃圾,即使对于 C 程序,glibccrt1.o也无用地想要引入。您可以尝试找到使其工作的东西,或者只是拆解crt1.o(它很小)并将其替换为您自己的不做任何垃圾的版本。 -
直接使用
ld时相同:stackoverflow.com/questions/6656317/…