2011-04-23 77 views

回答

28

在海湾合作委员会,-c开关是你想要的。

-c的意思是“编译,不要链接”,并且你得到一个name.o输出文件。

+2

我觉得'-c'对于大多数C编译器来说是相当标准的。 – JeremyP 2011-04-23 13:03:28

7

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

从GCC的手册页:

当你调用GCC,它一般不会 预处理,编译,汇编 和链接。 “整体选项” 允许您在 中间阶段停止此过程。例如, -c选项表示不运行链接程序。然后输出由汇编器输出的对象 组成。

链接阶段是查找main()的步骤,如果找不到它,就会投诉。

3

可以编译单个文件不main,但你不能链接他们当然不能运行他们,因为他们是不完整的程序。请注意,valgrind不是一个静态分析工具,而是一个运行时工具,因此它在没有链接到可运行程序的单个转换单元上没有用处。

如果你想测试单个文件,常见的做法是包括像每个文件中的以下内容:

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

而且随着-DUNIT_TEST编译文件。

+0

谢谢。为什么DUNIT? – jarryd 2011-04-23 13:16:56

+0

“-D”是预定义预处理器宏的命令行选项。 – 2011-04-23 13:18:04

+0

真的很普遍吗?我的意思是,比使用cppunit或更常见的东西? – Kos 2011-04-23 20:33:19

4

假设你的hello.c:

#include<stdio.h> 
#include<stdlib.h> 
_start() 
{ 
    exit(my_main()); 
} 
int my_main() 
{ 
    printf("Hello"); 
    return 0; 
} 

编译如下:

gcc -nostartfiles hello.c 

,你可以得到一个可执行出来。

+0

非常有趣的是。谢谢! – 2013-10-09 01:25:07

+1

您可以添加引文 – 2013-10-30 04:02:13

相关问题