我在使用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;
}
我似乎错过了一个重要的部分。 gcc
和ld
都没有任何错误,两者都以返回值0结束。
请不要告诉我“只使用gcc -o hello hello.c
”!我浏览了10个板子,人们总是给出答案。我想知道怎么做ld-way。
答案 0 :(得分:2)
如果您想了解GCC实际在做什么,请使用-v
标志运行它。 (例如,gcc -v -o hello hello.c
。)
你错过了GCC通常会指示链接器包含的一些代码片段。如果您查看gcc -v
的输出,您会看到crt1.o -lgcc -lgcc_s
和其他内容。
另请参阅GCC documentation了解-nostartfiles
,-nodefaultlibs
和-nostdlib
等选项,了解有关在幕后链接的这些额外代码位的上下文