我正在尝试更深入地理解C编译,因此我正在编译和链接“手动”。这是我的代码
int main()
{
return 0;
}
这是我放入我的控制台(Windows):
gcc -S main.c
as main.s -o main.o
ld main.o
在尝试链接时,我得到:
main.o:main.c:(text+0x7): undefined reference to `__main'
我正在尝试更深入地理解C编译,因此我正在编译和链接“手动”。这是我的代码
int main()
{
return 0;
}
这是我放入我的控制台(Windows):
gcc -S main.c
as main.s -o main.o
ld main.o
在尝试链接时,我得到:
main.o:main.c:(text+0x7): undefined reference to `__main'
您没有链接任何必要的支持库。像stdin,stdout,stderr这样的C全局对象不仅仅是从无处出现。命令参数和环境变量从操作系统中提取。退出所有这些 atexit()
函数被调用,返回代码来自 main
被传递给 exit(return_code)
。等等。
看看命令 gcc -dumpspecs
, gcc -print-libgcc-file-name
。查看该目录中的所有其他库。您会在dumpspecs的输出中找到很多引用的库和目标文件。我不知道究竟何时或如何解释这些规范规则,但你可能会得到这个想法。我认为GCC信息页面 info gcc
如果你深入挖掘,请详细解释。
info gcc
然后按'g'然后输入'Spec Files'
正如Jonathan Leffler所说,快捷方式是使用详细选项运行gcc: gcc -v
并看看它使用了什么命令。