2012-02-24 72 views
1

我想知道我是否可以告訴gcc/ld忽略未使用的模塊放入輸出文件。我可以告訴gcc/ld排除未使用的模塊嗎?

假設我有模塊a.c,b.cc.ca.cb.c取決於對方,其中一個包含main(),並且由於任何原因,沒有引用c.c的任何部分。

gcc -c a.c 
gcc -c b.c 
gcc -c c.c 

如果我捆綁在一起的東西到庫,無論從c.c代碼不會輸出:

ar rcs abc.a a.o b.o c.o 
gcc abc.a 

但是,如果我直接給.o文件GCC,從代碼c.c resp。包括c.o

gcc a.o b.o c.o 

我可以通過任何方式告訴gcc忽略未使用的模塊而不將它們放入庫中嗎?

我正在編程一個AVRμC並使用AVR Studio,它不允許創建庫,但希望省略未使用的源文件,具體取決於構建配置。

+1

如果您明確要求GCC添加c.o,您不應該對此感到驚訝:) – ydroneaud 2012-02-24 14:38:53

+0

那不是我,那是AVR Studio詢問它的原因:-) – glglgl 2012-02-24 14:53:10

回答

3

我不知道在AVR上是否有可能,但你可以要求GCC在編譯時使用-ffunction-sections -fdata-sections將每個符號放在它自己的部分。然後在鏈接步驟中,您可以使用-Wl,--gc-sections請求ld刪除未使用的部分。

+0

聽起來不錯。我剛剛找到了一個開關,可以啓用這個「gc-sections」。它是否也在沒有'-ffunction-sections -fdata-sections'的每個模塊的基礎上工作?我不想讓ISR程序被拋出...... – glglgl 2012-02-24 14:54:19

+0

@glglgl根據它的名字,它只是每個部分,而不是每個模塊。所以如果你的ISR沒有被其他代碼中的任何東西引用,它將被鏈接器丟棄。 – ydroneaud 2012-02-24 14:56:49

+0

哦,我認爲每個模塊都有一些自己的部分被丟棄,然後......經過一些測試後,事實證明這確實是這種情況。 – glglgl 2012-02-24 15:10:01

相關問題