我试图尽可能小地编译一个dll,我减少了section alignmnent并保存了一些大小,我还删除了带有(-nostdlib)和所有Optimizations的stdlib。现在我有一些问题
感谢。
答案 0 :(得分:3)
不要乱用部分,只需使用-fPIC
标志来减少重定位(否则x86上的引用总是绝对的)。您仍然会有.reloc
,因为它用于链接。此外,始终使用-Os
和-fomit-frame-pointer
进行编译。
.data
部分。如果你这样做是因为出了点问题:寻找并修复你的数据引用;一切都应该是不变的。如果你需要弄乱数据,首先将它复制到调用者提供的缓冲区,或类似的东西。
如果你可以花一些时间来学习GCC属性扩展,你会发现几个属性可以增强GCC对代码的理解,从而实现更好的优化(例如pure
和const
函数)。这可以减少很多字节。
更重要的是,尝试向GCC提供有关您如何使用代码的基本提示,例如:在适当的时候使用static
函数。
GCC仍会添加一些虚拟部分,您可以使用strip
实用程序消除这些部分。默认情况下,它不会删除所有内容,您需要指定-s
标记以删除所有符号,并-R name
删除部分。你可以用objcopy -S -R name ...
做类似的事情(只是提到它,因为如果你要用它做其他事情,你可以一次性完成所有事情)。