【问题标题】:Is there a way like -Wl,--whole-archive to force .so libs to load like .a libs in gcc?有没有像 -Wl,--whole-archive 这样的方法来强制 .so 库像 gcc 中的 .a 库一样加载?
【发布时间】:2021-03-06 06:11:21
【问题描述】:

我有一个用主代码注册回调的库。不幸的是,这意味着除非库中引用了其他内容,否则库不会被拉入。我使用 -Wl,--whole-archive 在 .a 版本的库中修复了这个问题。不幸的是,它似乎不适用于 .so 库。无论主代码是否知道该库存在,该库都会修改主代码的功能,因此是否需要将库添加到链接中取决于是否需要其功能。

【问题讨论】:

  • 所以我尝试过的一种解决方法是在另一个短 .c 文件中引用 .so 库并将其包含在链接中。这迫使包容。它有效,但它很丑。
  • 您可以尝试使用-Wl,--require-defined,LIB_FUNCTION 将其中一个库函数标记为未定义。

标签: gcc .so


【解决方案1】:

这就是-Wl,--no-as-needed 的用途。另请参阅 documentation for push-state option,它展示了如何安全地使用其 --as-needed 对应项(在命令行上请求两个库的按需链接,而不更改后续库的先前行为)。

【讨论】:

  • 抱歉这个时间,我需要测试一下。会回来的。
猜你喜欢
  • 1970-01-01
  • 2011-03-06
  • 1970-01-01
  • 2015-08-06
  • 1970-01-01
  • 2021-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多