9
考虑的hello world C程序:如何确定gcc默认将哪些命令行选项传递给ld?
的hello.c:
#include "stdio.h"
int main()
{
printf("Hello, World!\n");
}
如果我称之为:
$ gcc -c hello.c -o hello.o
它会产生一个ELF重定位文件hello.o
如果我然后打电话:
它将链接hello.o与LD和产生ELF可执行文件你好
但是,如果我叫LD的直接[2]
代替[1]
:
$ ld hello.o -o hello [2]
我得到这些错误:
/usr/bin/ld.bfd.real: warning: cannot find entry symbol _start
test.c:(.text+0xa): undefined reference to `puts'
gcc must将其他选项传递给ld(例如链接C库)。
是否有无论如何确定命令行gcc正在通过命令[1]
ld通过?
它似乎在我的Ubuntu 12.10 64盒'collect2'不是'ld'的简单别名。 'collect2'是一个可执行文件,而'ld'是'ld.bfd'的sym链接,它是一个到'hardened-ld'的符号链接,它是一个perl脚本。不知道那里发生了什么。 –
对不起,我不是指文字别名。你会发现如果你用'ld'运行相同的命令,它会起到同样的作用。文档:http://gcc.gnu.org/onlinedocs/gcc-4.3.5/gccint/Collect2.html –
'collect2'和'ld'有什么区别?阅读gccint后无法轻松理解。 –