2012-01-11 96 views
1

我可以使用此命令链接到我的example.o没有问题GCC链接对象如何?

gcc example.o -o example.exe 

但如果我手动链接它使用ld,我得到了许多错误:

ld example.o -o example.exe 
example.o:example.c:(.text+0x1d7e5): undefined reference to `strcmp' 
example.o:example.c:(.text+0x1d9b6): undefined reference to `_ftime' 
example.o:example.c:(.text+0x1dcbd): undefined reference to `strchr' 
example.o:example.c:(.text+0x1df7f): undefined reference to `strtoul' 
... 

如何gcc调用链接和将目标文件链接成可执行文件?

回答

0

答案比你想象的要复杂。

运行

gcc -v example.o -o example.exe 

明白发生了什么

底层细节是操作系统特定的。在Linux上,它静静地加载crt*.o对象(包含调用main等的_start汇编代码等)和C库。我不知道你的平台在做什么;我从来没有编译过Windows。

+0

非常感谢。我可以看到gcc在链接过程中正在做一些复杂的事情。再次感谢您的答案:) – coffeeground 2012-01-11 06:36:58

+0

顺便说一下,我如何链接一个简单的helloworld.o对象到使用ld的可执行文件? – coffeeground 2012-01-11 06:39:25

+1

你不用,你用'gcc'来连接'helloworld'。否则,你不会问! (答案完全取决于系统,因为你必须重现'gcc -v'显示的内容)。 – 2012-01-11 07:01:27