如何在没有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
编译该文件。