有没有办法在编译时添加命名空间?

时间:2011-11-04 15:17:14

标签: c++ compilation

我需要为一个静态包含某个使用命名空间的C ++库的应用程序编写一个插件。

不幸的是,我的插件需要链接到同一个库的自定义版本。

理想情况下,我想重新编译它,使其符号不会与应用程序中的符号冲突。

这样做的一种方法是,在不必编辑数百个文件且不失去从上游应用新更新的能力的情况下,将在编译时向库添加名称空间前缀时间

显然虽然没有g++选项可以做到这一点。或者,有没有办法以编程方式更改已编译的.so文件中的符号?


编辑:澄清一下,问题不在于库插件边界,这是“简单”部分;问题是我有这个庞大的库,我想找到一种方法来重新编译它,好像它都属于某个命名空间,而不必更改源代码。

3 个答案:

答案 0 :(得分:1)

我没有看到一个简单的解决方案。你可以编写GCC pluginGCC MELT中的扩展来完成这项工作,但这可能太多了。

如果库是免费的,并且如果你允许更改它,我会制作补丁,并将它们推向上游(即使这需要一些时间)。

答案 1 :(得分:1)

为什么不写一个打开命名空间然后包含你已经拥有的文件的文件?

答案 2 :(得分:0)

我们为其中一个与

链接的库执行此操作
namespace MY_NAMESPACE
{
 #include "api\api.h"
}

然后只需从新命名空间

调用其函数
MY_NAMESPACE::api_function();

编辑:我可能已经错过了一点,因为我不确定这将如何影响符号