代码之家  ›  专栏  ›  技术社区  ›  jakogut

在C++中编写可移植的动态可加载库的最简单方法是什么?

  •  6
  • jakogut  · 技术社区  · 14 年前

    我正在做一个项目,它有多个类似的代码路径,我想从主项目中分离出来,插入插件。项目必须保持跨平台兼容,并且我研究的所有动态库加载api都是特定于平台的。

    创建一个可以在多个操作系统上编译和运行而不需要额外修改代码的动态库加载系统,最简单的方法是什么?理想情况下,我想写一个插件,并让它在所有的操作系统的项目支持工作。

    谢谢。

    4 回复  |  直到 10 年前
        1
  •  7
  •   Pablo Santa Cruz    14 年前

    您将不得不使用与平台相关的代码 装载系统 . 在Windows上加载DLL和加载 在Unix中。但是,有几个 #ifdef 您将能够在加载程序中拥有基本相同的代码库。

        2
  •  5
  •   Didier Trosset    14 年前

    加载Windows和Unix/Linux的动态库有3个功能。一对函数用于加载/卸载库,另一个函数用于获取库中函数的地址。您可以很容易地围绕这三个函数编写一个包装器,以提供跨操作系统的支持。

        3
  •  4
  •   Dummy00001    14 年前

    理想情况下,我想写一个插件,并让它在所有的操作系统的项目支持工作。

    • 避免在动态库中使用静态对象。提供适当的初始化方法/函数来分配对象。在操作系统加载库的过程中发生的问题(这是调用静态对象的任务时)非常难以调试-仅次于多线程问题。

    • 接口头不能包含代码。没有内联方法,没有预处理器定义。这是为了避免使用特定版本库的代码污染应用程序,使得以后无法替换库。

    • 接口头不能包含实现类本身—只能包含抽象类和 factory functions . 与前一点类似-避免应用程序依赖于类的特定版本。工厂是用户应用程序实例化具体实现类的一种方式。

        4
  •  2
  •   David Rodríguez - dribeas    14 年前