使用ld生成可执行文件

时间:2012-11-01 00:43:08

标签: gcc ld

我在使用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-way。

1 个答案:

答案 0 :(得分:2)

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

你错过了GCC通常会指示链接器包含的一些代码片段。如果您查看gcc -v的输出,您会看到crt1.o -lgcc -lgcc_s和其他内容。

另请参阅GCC documentation了解-nostartfiles-nodefaultlibs-nostdlib等选项,了解有关在幕后链接的这些额外代码位的上下文