我有一个已编译的库C ++(让我们称之为 a.so ),其中包含Boost库符号,我没有重新编译它的源代码。
我制作了一个C ++程序,需要链接到这个库和我计算机上安装的boost版本。
但是当我的程序试图达到Boost函数时,它最终调用 a.so 中定义的Boost函数而不是我计算机上的函数。
我试图在 a.so 周围创建一个包装库,以隐藏不需要的符号,但无法编译。
如何使用或不使用包装器配置CMake以使其构建和工作?
解决方案需要与Linux兼容。
答案 0 :(得分:0)
您可以使用add_custom_command
,创建PRE_LINK
步骤,从a.so
中删除提升功能。您可以将其写入新文件(并更改您在CMake中链接的。)或覆盖它。
可以使用objcopy
实用程序和--strip-symbols
参数完成此操作。假设有许多提升符号你想剥离,在nm
上使用a.so
并将提升符号过滤到文件中可能是谨慎的。