【发布时间】:2023-02-24 02:43:48
【问题描述】:
我想禁止将一组特别命名的符号链接到我的可执行文件中,以确保我的可执行文件没有携带我不想要的功能和依赖项。
在我的具体情况下,这些符号来自 ARM Cortex-M MCU 上的libc_nano.a,但我希望应用程序级代码以及“更大”的计算机上也有此功能,所以我的问题是通用的。
如果最终链接中包含命名符号,我没有看到会触发错误的链接器标志,但我认为这会做我想要的。
有没有办法用 GCC 链接器实现这一点?
【问题讨论】:
-
让它发出一个地图文件,然后解析它。或者使用
objdump并解析它。或者使用nm并解析它。 -
我问这个问题是关于将此作为调用 GCC 链接器的一部分,因为我明确不想编写强大的链接后构建系统步骤来执行此操作。
-
您可能可以在链接描述文件中做一些事情。比如
ASSERT(DEFINED(<symbol>), "Error!") -
您要避免的是“稳健”部分还是“链接后步骤”部分?后者对我来说很有意义,但前者回避了鲁棒性问题反对什么?您已经是特定于工具链的,因此可移植性似乎不是您关心的问题。
-
做一个测试链接,其中包括一个定义符号的目标模块(在任何提供它们的库之后列出)。如果该测试链接出现错误(由于多重定义的符号),请报告错误并停止构建。否则,继续进行没有附加目标模块的常规链接。