2013-02-06 51 views
3

我正在爲atmega-328p微控制器使用avr-gcc。 的代碼建有:讓鏈接器爲avr/gcc刪除未使用的目標文件

avr-gcc -g -Wall -Os -mmcu=atmega328p -D__AVR_ATmega3280__ -DARCH_AVR -I/usr/avr/include -DF_CPU=16000000 -c -o heap.o heap.c 
avr-gcc -g -Wall -Os -mmcu=atmega328p -D__AVR_ATmega3280__ -DARCH_AVR -I/usr/avr/include -DF_CPU=16000000 -c -o kerneltimer.o kerneltimer.c 
avr-gcc -g -Wall -Os -mmcu=atmega328p -D__AVR_ATmega3280__ -DARCH_AVR -I/usr/avr/include -DF_CPU=16000000 -c -o message.o message.c 
avr-gcc -g -Wall -Os -mmcu=atmega328p -D__AVR_ATmega3280__ -DARCH_AVR -I/usr/avr/include -DF_CPU=16000000 -c -o driver.o driver.c 
avr-gcc -g -Wall -Os -mmcu=atmega328p -D__AVR_ATmega3280__ -DARCH_AVR -I/usr/avr/include -DF_CPU=16000000 -c -o watchdog.o watchdog.c 
avr-gcc -g -Wall -Os -mmcu=atmega328p -D__AVR_ATmega3280__ -DARCH_AVR -I/usr/avr/include -DF_CPU=16000000 -c -o mutex.o mutex.c 
avr-gcc -g -Wall -Os -mmcu=atmega328p -D__AVR_ATmega3280__ -DARCH_AVR -I/usr/avr/include -DF_CPU=16000000 -c -o semaphore.o semaphore.c 
avr-gcc -g -Wall -Os -mmcu=atmega328p -D__AVR_ATmega3280__ -DARCH_AVR -I/usr/avr/include -DF_CPU=16000000 -c -o kernelswi.o kernelswi.c 
avr-gcc -g -Wall -Os -mmcu=atmega328p -D__AVR_ATmega3280__ -DARCH_AVR -I/usr/avr/include -DF_CPU=16000000 -c -o task.o task.c 
avr-gcc -g -Wall -Os -mmcu=atmega328p -D__AVR_ATmega3280__ -DARCH_AVR -I/usr/avr/include -DF_CPU=16000000 -c -o kernelwdt.o kernelwdt.c 
avr-gcc -g -Wall -Os -mmcu=atmega328p -D__AVR_ATmega3280__ -DARCH_AVR -I/usr/avr/include -DF_CPU=16000000 -c -o myfirstapp.o myfirstapp.c 
avr-gcc -g -Wall -Os -mmcu=atmega328p -D__AVR_ATmega3280__ -DARCH_AVR -I/usr/avr/include -DF_CPU=16000000 -c -o taskport.o taskport.c 
avr-gcc -g -Wall -Os -mmcu=atmega328p -D__AVR_ATmega3280__ -DARCH_AVR -I/usr/avr/include -DF_CPU=16000000 -c -o timer.o timer.c 

和鏈接有:

avr-gcc -g -Wall -Os -mmcu=atmega328p -D__AVR_ATmega3280__ -DARCH_AVR -I/usr/avr/include -DF_CPU=16000000 -Wl,-Map,myfirstapp.map -L/usr/avr/lib -Os -o myfirstapp.elf heap.o kerneltimer.o message.o driver.o watchdog.o mutex.o semaphore.o kernelswi.o task.o kernelwdt.o myfirstapp.o taskport.o timer.o 

NOW-事實證明這個特定的程序,沒有什麼heap.o使用。然而代碼包含在最終的二進制文件中。無論如何,如果任何地方沒有任何內容被使用,我可以讓鏈接器至少使用完整的.o文件嗎?

雖然這只是一個有趣的學習目的項目,但我寧願瞭解這些工具是否可以找出結果,而不是自己追蹤這些東西。

回答

7

是的,這是可能的。將--gc-sections傳遞給鏈接器將指示它省略未引用的節。另外,將-ffunction-sections-fdata-sections標誌傳遞給編譯器將指示它爲每個函數和變量生成一個部分,從而允許將這些標記單獨排除在外,而不僅僅是在文件級別。

1

將--gc-sections添加到鏈接器對我沒有幫助。但是加入

輪候冊,-GC-部分沒有工作

+0

'-Wl, - GC-sections'是一個編譯器選項告訴編譯器選項'--gc-sections'傳給連接器。 –

相關問題