我需要为一个应用程序编写插件,该应用程序静态包含了一个特定的C++库,该库不使用命名空间。
不幸的是,我的插件需要链接到同一库的自定义版本。
理想情况下,我希望重新编译它,使其符号与应用程序中找到的符号不冲突。
一种方法是在编译时为库添加命名空间前缀,而不必编辑数百个文件,也不会失去从上游应用新更新的能力。
然而,显然没有适用于此的
不幸的是,我的插件需要链接到同一库的自定义版本。
理想情况下,我希望重新编译它,使其符号与应用程序中找到的符号不冲突。
一种方法是在编译时为库添加命名空间前缀,而不必编辑数百个文件,也不会失去从上游应用新更新的能力。
然而,显然没有适用于此的
g++
选项。有没有其他的方法可以以编程方式更改已经编译的.so
文件中的符号?
像另一个问题建议的那样使用预处理器指令来修改编译(Renaming symbols at compile time without changing the code in a cross platform way),因为符号数量巨大,所以这并不实际。
尝试通过将命名空间作为补丁上游批准是最好的长期解决方案,但这可能需要一段时间,而我需要一个临时解决方案。
编辑: 为了澄清,问题不在库-插件边界上,那是“容易”的部分;问题是我有这个巨大的库,我希望找到一种方法,让它重新编译,仿佛所有都属于某个命名空间,而不必更改源代码。