【发布时间】:2019-04-25 18:22:27
【问题描述】:
我正在尝试解决链接器在我的代码中删除注册的事实。 有关详细信息,请参阅此answer。
我对这个答案的问题是 --whole-archive 选项对于仅 1 个函数调用似乎有点过头了。我想避免我认为它导致的巨大代码膨胀。 我找到了
属性((使用))
,但这适用于编译,而不是链接级别。
所以我想知道是否有一种特定的方法可以告诉链接器不要放弃特定的函数调用,而不是更改整个程序的链接选项。
为了澄清,这是我的代码:
bool dummy = (Register(), false); // Register is never called because linker dropped entire static library
【问题讨论】:
-
“放弃注册”是什么意思?此外,链接器行为的细节是特定于实现的,那么您使用的是哪个实现?海湾合作委员会,也许吧?
-
@JohnBollinger 链接的答案提供了更长的解释......简而言之,我有 bool dummy = (Register("Something1"), false);并且链接器会删除整个库,因此永远不会调用 Register()
-
不清楚您描述的情况是否与您参考的答案相似。特别不清楚链接器是否对您的案例中涉及的(错误)行为负责,此外,解决方案的最佳选择很可能取决于上下文。所以请提供一个 minimal reproducible example 来证明这个问题。
-
这个问题被标记为
shared-libraries,但从帖子本身很明显它应该被标记为static-libraries。改变了。
标签: c++ c linker static-libraries