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