他们说main()是一个与任何其他函数一样的函数,但“标记”为二进制文件中的入口点,操作系统可能会找到(不知道如何)并从那里启动程序的入口点。因此,我正在尝试了解有关此功能的更多信息。我做了什么?我创建了一个简单的 .C 文件,其中包含以下代码:
int main(int argc, char **argv) {
return (0);
}
我保存了文件,安装了 GCC 编译器(在 Windows,MingW 环境中)并创建了一个批处理文件,如下所示:
gcc -c test.c -nostartfiles -nodefaultlibs -nostdlib -nostdinc -o test.o
gcc -o test.exe -nostartfiles -nodefaultlibs -nostdlib -nostdinc -s -O2 test.o
@%comspec%
我这样做是为了获得一个非常简单的编译器和链接器,没有库,没有头文件,只有编译器。因此,编译顺利,但链接停止并出现此错误:
test.c:(.text+0xa): undefined reference to '___main'
collect2.exe: error: Id returned 1 exit status
我认为主要功能是由链接器导出的,但我相信您不需要任何包含有关它的附加信息的库。但它看起来确实如此。就我而言,我认为它必须是标准的 GCC 库,所以我下载了它的源代码并打开了这个文件:libgcc2.c 现在,我不知道这是否是构建 main 函数的文件由 GCC 链接。其实我不明白 GCC 是怎么使用 main 函数的。为什么链接器需要 gcc 标准库?想知道主线呢?我希望这使我的问题非常具体和明确。谢谢!