CMake:如何隐藏预编译库中的符号

时间:2017-03-15 18:04:21

标签: c++ boost cmake

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

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

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

我试图在 a.so 周围创建一个包装库,以隐藏不需要的符号,但无法编译。

如何使用或不使用包装器配置CMake以使其构建和工作?

解决方案需要与Linux兼容。

1 个答案:

答案 0 :(得分:0)

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

可以使用objcopy实用程序和--strip-symbols参数完成此操作。假设有许多提升符号你想剥离,在nm上使用a.so并将提升符号过滤到文件中可能是谨慎的。