2011-04-23 72 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

相關問題