我想將多個C文件編譯爲單個程序集文件(它們是相互關聯的,編譯時會有二進制文件)。 GCC有可能嗎?例如,看看this repo。 make文件將生成一個文件(二進制文件)。將多個C代碼編譯爲一個單獨的程序集文件
但是我想將它們編譯成彙編代碼,然後將它們編譯爲二進制代碼。顯然,如果我將所有程序集文件都放在一個* .s文件中,對我來說會更容易。
有什麼想法?
我想將多個C文件編譯爲單個程序集文件(它們是相互關聯的,編譯時會有二進制文件)。 GCC有可能嗎?例如,看看this repo。 make文件將生成一個文件(二進制文件)。將多個C代碼編譯爲一個單獨的程序集文件
但是我想將它們編譯成彙編代碼,然後將它們編譯爲二進制代碼。顯然,如果我將所有程序集文件都放在一個* .s文件中,對我來說會更容易。
有什麼想法?
我看到三種方法:
使用cat
以連接組件文件。這應該工作,除非兩個或多個翻譯單元使用具有相同名稱的靜態變量。如果使用兩次標籤,這可能會有問題。您可以使用進行預處理一個sed腳本這樣使標籤唯一的individal文件:
s/\.L\([[:alnum:]]*\)/.L$ident\1/
其中$ident
是每個組件文件的唯一字符串。這將.Lfoo
轉換爲.Lidentfoo
。
使看起來像這樣的C源文件和編譯它,同樣需要注意的是前:
#include "module1.c"
#include "module2.c"
...
#include "modulen.c"
使用ld -r
在一組目標文件的執行部分鏈接。這給你一個包含其他文件內容的大對象文件。然後,您可以使用像objconv
這樣的工具來拆卸目標文件,然後重新組裝。請注意,這可能不是你所需要的。
包括C源代碼確實奏效!謝謝。 –
您可以嘗試將所有來源與Amalgamate粘合在一起,然後生成裝配輸出。
'#include'所有這些文件合併爲一個'.c'文件和編譯 – mvidelgauz
聞起來像[XY問題(http://meta.stackexchange.com/questions/66377/what-is- the-xy-problem) – LPs
@mvidelgauz在大多數情況下沒有修改就無法正常工作。 –