我有一个已编译的库C++(我们称之为a.so),它有Boost库符号链接在其中,我没有源代码重新编译它。CMake:如何从预编译的库中隐藏符号
我已经做了一个C++程序,它需要链接到这个库和我的电脑上安装的增强版本。
但是当我的程序尝试达到升压功能时,它最终会调用a.so中定义的升压功能,而不是我电脑上的升压功能。
我试过在a.so左右制作一个包装库来隐藏不需要的符号,但是它无法编译。
如何配置CMake使其构建和工作,有无包装?
该解决方案需要与Linux兼容。
我有一个已编译的库C++(我们称之为a.so),它有Boost库符号链接在其中,我没有源代码重新编译它。CMake:如何从预编译的库中隐藏符号
我已经做了一个C++程序,它需要链接到这个库和我的电脑上安装的增强版本。
但是当我的程序尝试达到升压功能时,它最终会调用a.so中定义的升压功能,而不是我电脑上的升压功能。
我试过在a.so左右制作一个包装库来隐藏不需要的符号,但是它无法编译。
如何配置CMake使其构建和工作,有无包装?
该解决方案需要与Linux兼容。
您可以使用add_custom_command
,创建一个PRE_LINK
步骤,该步骤将从a.so
中删除升压功能。你可以把它写到一个新文件中(并且改变你在CMake中链接的那个.so),或者覆盖它。
这可以通过objcopy
实用程序和--strip-symbols
参数完成。假设有很多提升符号要删除,在a.so
上使用nm
,并将提升符号过滤为文件可能比较谨慎。
谢谢,我会试试看。 – Sisyphe
您是否尝试过动态链接库文件而不是静态链接库a.so? – oLen
没有,因为提到我没有资源重新编译它。 – Sisyphe