如何在2个不同的共享库中调用具有相同符号的函数?

时间:2012-11-01 15:03:31

标签: c++ shared-libraries qnx

我有几个用C ++编写的同一个库的版本。我需要并排比较它们。这些库使用相同的命名空间,函数名称并使用相同的参数。

当我同时链接两个或多个库时,是否有任何方法可以控制我使用的库版本?

1 个答案:

答案 0 :(得分:5)

您不能使用相同的符号链接两个库,并且可以访问这两个库。但是,您可以构建自己的瘦包装程序库来消除两个版本化库的歧义:

  • 使用抽象虚函数
  • 定义一个抽象类Wrapper,用于练习目标库的功能
  • 在名为Wrapper的类中定义WrapperImpl的实现,该类从虚拟方法调用目标库
  • 定义一个独立的方法Wrapper *MakeImpl返回new WrapperImpl()
  • 多次将WrapperImpl编译到静态库中,每次都链接到目标库的不同版本。对于不同版本,严重:-DWrapperImpl=WrapperImplV1 -DMakeImpl=MakeImplV1传递给编译器,V1V2V3等。你最终应该有多个库。
  • 将您的主要测试人员与这些多个图书馆链接

此时,您的主测试人员可以访问通过预处理器重命名MakeImplV1而创建的独立函数MakeImplV2MakeImplV3MakeImpl等。使用这些函数可以获取调用目标库的不同版本的Wrapper实例。