我正在尝试更深入地理解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'
答案 0 :(得分:12)
您没有链接任何必要的支持库。像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
并查看它使用的命令。