1

我在使用 ld 作为链接器的 C 语言中生成一个小型 hello-world 程序时遇到问题。

到目前为止,这些是我的步骤:

gcc -c hello.c
ld -o hello hello.o -lc

./hello
-bash: ./hello: no such file or directory

hello.c的来源在这里:

#include <stdio.h>
int main(){
    puts("Hello, world!");
    return 0;
}

看来我在这里错过了一个重要的部分。既没有gccld没有任何错误,并且都以返回值 0 结束。

请不要告诉我“只是使用gcc -o hello hello.c”!我浏览了大约 10 个板,人们总是给出这个答案。我想知道如何以 ld 方式做到这一点。

4

1 回答 1

3

如果您想了解 GCC 实际在做什么,请使用-v标志运行它。(例如,gcc -v -o hello hello.c。)

您缺少一些 GCC 通常会指示链接器包含的代码。如果您查看 的输出gcc -v,您会看到类似crt1.o -lgcc -lgcc_s和其他内容。

另请参阅GCC 文档以获取诸如 、 和 之类的选项-nostartfiles-nodefaultlibs以及-nostdlib有关在幕后链接的这些额外代码位的一些上下文。

于 2012-11-01T00:56:14.953 回答