如何在没有main函数的情况下编译C源代码?

如何编译我的C源文件而不需要在其中放置main函数?

我得到一个没有main函数的.c文件的错误,并且不想只为编译添加main函数。

在GCC上, -c开关是你想要的。

-c表示“编译,不链接”,并且您获得name.o输出文件。

使用编译器的-c选项(适用于GCC,选项可能与其他c编译器相同)。

来自GCC的手册页:

当您调用GCC时,它通常会进行预处理,编译,汇编和链接。 “整体选项”允许您在中间阶段停止此过程。 例如,-c选项表示不运行链接器。 然后输出由汇编器输出的目标文件组成。

链接阶段是查找main()的步骤,如果找不到则抱怨。

假设你有hello.c:

 #include #include _start() { exit(my_main()); } int my_main() { printf("Hello"); return 0; } 

编译为:

 gcc -nostartfiles hello.c 

你可以从中获得一个可执行文件。

您可以编译没有main单个文件,但是您无法链接它们,当然也不能运行它们,因为它们不是完整的程序。 请注意,valgrind不是静态分析工具,而是运行时工具,因此对未链接到可运行程序的各个转换单元无效。

如果要测试单个文件,通常的做法是在每个文件中包含以下内容:

 #ifdef UNIT_TEST int main(int argc, char **argv) { /* unit test code goes here */ } #endif 

并使用-DUNIT_TEST编译该文件。