AVR/GCC设置不链接未调用的函数
http://blog.csdn.net/shevsten/article/details/7049688
在AVR
Studio4/5的AVR/GCC默认设置下,未调用的函数也会被link进最终的镜像,从而增大image的大小,这会浪费flash资源.
以下是如何在AVR Studio4/5设置,不把未调用的函数link进image.
方法是在complier命令中增加-ffunction-sections,linker命令中增加-Wl,--gc-sections.
-ffunction-sections:不用此参数时,.o里代码部分只有.text段;使用此参数,则会使每个函数单独成为一段,比如函数func1()成为.text.func1段,但对链接后代码大小没影响。
--gc-sections:这是avr-ld的参数,通过-Wl,<option>由gcc把option里的参数传递给avr-ld。它使得链接器ld链接时删除不用的段。
这样,因为每个函数自成一段(即可以看作函数=段),如果有某个函数未被任何函数/段调用,则ld不会链接它。
AVR Studio 4:
Edit Configuration Options – Custom Options – [All Files] – add
-ffunction-sections
– [Linker Options] – add -Wl,--gc-sections
gcc的-ffunction-sections和-fdata-sections选项与ld的--gc-sections选项
http://songzhangzhang.blog.163.com/blog/static/69401981201141321641323/
g++: error: unrecognized option ‘--gc-sections’
注意:若不添加这些选项的话,则默认是不链接未调用的函数的
testlib.cpp:
?
1 2 3 4 5 6 7 8 9 10 11 12 |
|
testlib.h
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
main.cpp
?
1 2 3 4 5 6 7 8 |
|
libtestlib.a的编译:
?
1 |
|
g++ -c -ffunction-sections -fdata-sections main.cpp
?
1 2 3 4 5 6 |
|
编译为动态库的方法:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
-ffunction-sections -Wl,--gc-sections,布布扣,bubuko.com