我有几个用 C++ 编写的同一个库的版本。我需要并排比较它们。这些库使用相同的命名空间、函数名称并采用相同的参数。
当我同时链接两个或多个库时,是否有任何方法可以控制我使用哪个版本的库?
最佳答案
您无法链接两个具有相同符号的库并同时访问这两个库。但是,您可以构建自己的瘦包装器库来消除两个版本化库的歧义:
- 定义一个抽象类
Wrapper
,使用抽象虚函数实现目标库的功能 - 在名为
WrapperImpl
的类中定义Wrapper
的实现,该类从虚拟方法调用目标库 - 定义一个独立的方法
Wrapper *MakeImpl
返回new WrapperImpl()
- 多次将
WrapperImpl
编译成静态库,每次都链接不同版本的目标库。 关键将-DWrapperImpl=WrapperImplV1 -DMakeImpl=MakeImplV1
传递给编译器,V1
、V2
、V3
等,针对不同的版本。您应该最终拥有多个库。 - 将您的主测试仪与这些多个库相关联
此时,您的主测试人员可以访问通过重命名 MakeImplV1
、MakeImplV2
、MakeImplV3
等创建的独立函数 MakeImpl
通过预处理器。使用这些函数获取调用不同版本目标库的 Wrapper
实例。
关于c++ - 如何在 2 个不同的共享库中调用具有相同符号的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13179853/