在最小C程序

时间:2016-08-24 23:18:53

标签: c gcc

我正在尝试更深入地理解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'

1 个答案:

答案 0 :(得分:12)

您没有链接任何必要的支持库。像stdin,stdout,stderr这样的C全局对象不仅仅是从无处出现。命令参数和环境变量从操作系统中提取。退出时,将调用所有atexit()个函数,并将main的返回码传递给exit(return_code)。等

查看命令gcc -dumpspecsgcc -print-libgcc-file-name。查看该目录中的所有其他库。您会在dumpspecs的输出中找到很多引用的库和目标文件。我不知道究竟何时或如何解释这些规范规则,但你可能会得到这个想法。我认为GCC信息页info gcc如果你深入挖掘就会详细解释它。

info gcc然后按'g'然后输入'Spec Files'

正如Jonathan Leffler所说,快捷方式是使用详细选项运行gcc:gcc -v并查看它使用的命令。