首先,我向那些关注我在过去几天发布的问题的人道歉。这听起来可能有点重复,因为我一直在问与 -ffunction-sections 和 -fdata-sections 相关的问题,而这个问题在同一行。这些问题和他们的答案并没有解决我的问题,所以我意识到最好在这里陈述完整的问题并让 SO 专家思考它。很抱歉没有早点这样做。
所以,这是我的问题:
我构建了一组提供许多功能的静态库。这些静态库将提供给许多产品。并非所有产品都会使用我的库提供的所有功能。问题是库的大小非常大,产品希望减少它。主要目标是减少最终的可执行文件大小,而不是库大小本身。
现在,我做了一些研究,发现如果源文件中有 4 个函数并且应用程序只使用其中一个函数,链接器仍会将其余 3 个函数包含到最终的可执行文件中,因为它们都是属于同一个目标文件。我进一步分析发现 -ffunction-sections、-fdata-sections 和 -gc-sections(这是一个链接器选项)将确保只有一个函数被链接。
但是,由于某些我无法控制的原因,这些选项现在无法使用。
有没有其他方法可以确保链接器只链接严格要求的函数并排除所有其他函数,即使它们在同一个目标文件中?
有没有其他方法来处理这个问题?
注意:几乎排除了重新组织我的代码的可能性,因为它是遗留代码并且很大。
我在这里主要处理 VxWorks 和 GCC。
谢谢你的帮助!