4

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

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

4

1 回答 1

5

您不能链接具有相同符号的两个库并访问两者。但是,您可以构建自己的瘦包装库来消除两个版本库的歧义:

  • 定义一个抽象类Wrapper,使用抽象虚函数来练习目标库的功能
  • 在一个调用的类中定义一个实现,Wrapper该类WrapperImpl从虚拟方法调用目标库
  • 定义一个独立的方法Wrapper *MakeImpl返回new WrapperImpl()
  • WrapperImpl多次编译成静态库,每次都链接不同版本的目标库。关键:传递-DWrapperImpl=WrapperImplV1 -DMakeImpl=MakeImplV1给编译器,使用V1, V2, V3, 等等,用于不同的版本。您应该最终得到多个库。
  • 将您的主测试仪与这些多个库链接

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

于 2012-11-01T15:29:01.683 回答