2016-12-26 47 views
2

我有2個文件:編譯多於一個C文件更進一個單一的非可執行對象文件

AC

BC

兩者的他們沒有主要功能。 如何編譯並將它們鏈接到名爲D.o的單個非可執行文件?

+0

您可以使用'#include' – 0x90

+0

創建第三個C源文件,其中包括和編譯第三始終包含另一個C文件。可能比@ 0x90更好?或者創建一個lib。 –

+0

@ 0x90不,通常你不能(例如,如果兩個文件對本地靜態變量使用相同的名稱,但也有其他情況)。 – yugr

回答

5

你可以先編譯它們分開的目標文件,然後通過ld -r鏈接那些保留重定位信息:

ld -r tmp1.o tmp2.o -o tmp.o 
1

如果你想有一個非可執行文件,@yugr解決方案就好了。但是,如果根本不需要,那麼這裏是如何鏈接多個文件並創建單個對象文件。

GCC:
gcc -o d.o a.c b.c

注意-o用於指定目標文件的名稱。

但是,如果你想做的更好,你應該看看makefile,併爲每個源文件創建一個目標文件,然後將它們一起編譯。

小例子:

exe: a.o b.o 
     gcc -o exe a.o b.o 

a.o: a.c 
     gcc -c a.c 

b.o: b.c 
     gcc -c b.c 
+1

這有什麼關係? OP明確要求非可執行輸出。 – yugr

+0

對不起,我沒有看到它。 – UrbiJr

相關問題