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