【发布时间】:2023-03-09 09:05:02
【问题描述】:
所以我正在尝试编译、链接和运行一个没有主函数的程序。这是代码:
#include <stdio.h>
#include <stdlib.h>
int my_main()
{
printf("Hello world!\n");
return 0;
}
void _start()
{
exit(my_main());
}
尝试使用以下命令进行编译:gcc -nostartfiles nomain.c。虽然它确实在 Debian vm 上编译并生成了 a.out 文件,但我无法在我的 macOS Catalina v10.15.2 中编译它。我正在使用最新版本的 gcc。我在尝试编译时收到的消息是:
架构 x86_64 的未定义符号:“_main”,引用自: 主要可执行文件 ld 的隐式入口/启动:未找到架构 x86_64 collect2 的符号:错误:ld 返回 1 退出状态
到目前为止,我已尝试将 _start 更改为 start,但仍然得到相同的结果。据我了解,编译过程因操作系统而异。
注意:这里没有我想解决的问题,只是好奇。
提前谢谢你
【问题讨论】:
-
消息很清楚。操作系统预期 _main,您将其命名为 _start