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

标签 c++ shared-libraries qnx

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

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

最佳答案

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

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

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

关于c++ - 如何在 2 个不同的共享库中调用具有相同符号的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13179853/

相关文章:

bash - 如何在最小的 shell 中递归搜索目录(没有 grep、find 等)?

c++ - 我如何在 QNX 上强制使用特定的线程序列?

c++ - 对重载静态函数的模糊调用

c++ - <</>> 运算符重载和输入/输出函数之间的区别

c++ - 动态库和主程序中的静态类变量

python-3.x - 在 Ubuntu 上的 Python 3 virtualenv 下安装 PySide

linux - 使用 setuid 的可执行文件找不到共享库

networking - 如何查看同一网络中的主机和目标?

c++ - Visual Studio 2017 中的 MySQL 连接器/C++ 错误 "Unresolved external symbol _get_driver_instance"

c++ - Gdb 在一个简单的 std::string 未捕获异常上没有给出堆栈