2017-03-15 580 views
2

我有一个已编译的库C++(我们称之为a.so),它有Boost库符号链接在其中,我没有源代码重新编译它。CMake:如何从预编译的库中隐藏符号

我已经做了一个C++程序,它需要链接到这个库和我的电脑上安装的增强版本。

但是当我的程序尝试达到升压功能时,它最终会调用a.so中定义的升压功能,而不是我电脑上的升压功能。

我试过在a.so左右制作一个包装库来隐藏不需要的符号,但是它无法编译。

如何配置CMake使其构建和工作,有无包装?

该解决方案需要与Linux兼容。

+0

您是否尝试过动态链接库文件而不是静态链接库a.so? – oLen

+0

没有,因为提到我没有资源重新编译它。 – Sisyphe

回答

0

您可以使用add_custom_command,创建一个PRE_LINK步骤,该步骤将从a.so中删除升压功能。你可以把它写到一个新文件中(并且改变你在CMake中链接的那个.so),或者覆盖它。

这可以通过objcopy实用程序和--strip-symbols参数完成。假设有很多提升符号要删除,在a.so上使用nm,并将提升符号过滤为文件可能比较谨慎。

+0

谢谢,我会试试看。 – Sisyphe