2016-07-05 45 views
1

我想將多個C文件編譯爲單個程序集文件(它們是相互關聯的,編譯時會有二進制文件)。 GCC有可能嗎?例如,看看this repo。 make文件將生成一個文件(二進制文件)。將多個C代碼編譯爲一個單獨的程序集文件

但是我想將它們編譯成彙編代碼,然後將它們編譯爲二進制代碼。顯然,如果我將所有程序集文件都放在一個* .s文件中,對我來說會更容易。

有什麼想法?

+5

'#include'所有這些文件合併爲一個'.c'文件和編譯 – mvidelgauz

+3

聞起來像[XY問題(http://meta.stackexchange.com/questions/66377/what-is- the-xy-problem) – LPs

+1

@mvidelgauz在大多數情況下沒有修改就無法正常工作。 –

回答

7

我看到三種方法:

  • 使用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這樣的工具來拆卸目標文件,然後重新組裝。請注意,這可能不是你所需要的。

+0

包括C源代碼確實奏效!謝謝。 –

2

您可以嘗試將所有來源與Amalgamate粘合在一起,然後生成裝配輸出。

相關問題