【问题标题】:CMake: How to hide symbols from a precompiled libraryCMake:如何从预编译库中隐藏符号
【发布时间】:2017-03-15 18:04:21
【问题描述】:

我有一个已编译的库 C++(我们称之为 a.so),其中链接了 Boost 库符号,但我没有重新编译它的源代码。

我制作了一个 C++ 程序,它需要链接到这个库和我计算机上安装的 boost 版本。

但是当我的程序尝试访问 Boost 函数时,它最终会调用 a.so 中定义的 Boost 函数,而不是我计算机上的函数。

我试图围绕 a.so 创建一个包装库来隐藏不需要的符号,但编译失败。

如何配置 CMake 以使其构建和工作,无论是否有包装器?

解决方案需要与 Linux 兼容。

【问题讨论】:

  • 您是否尝试过为您的库 a.so 动态链接 boost 库而不是静态链接?
  • 不,因为如上所述,我没有重新编译它的源代码。

标签: c++ boost cmake


【解决方案1】:

您可以使用add_custom_command,创建一个PRE_LINK 步骤,从a.so 中删除提升功能。您可以将其写入新文件(并更改您在 CMake 中链接的 .so),或覆盖它。

这可以通过objcopy 实用程序和--strip-symbols 参数来完成。假设有很多你想要去除的提升符号,在 a.so 上使用 nm 并将提升符号过滤到文件中可能是谨慎的。

【讨论】:

  • 谢谢,我试试看。
猜你喜欢
  • 1970-01-01
  • 2021-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-12
  • 1970-01-01
  • 2018-12-30
  • 1970-01-01
相关资源
最近更新 更多