在开发需要支持动态加载的共享对象/动态库的C/C++ (=2?)插件化框架时,有哪些示例可以帮助实现细节呢?
谢谢。
注意:关键点在于支持“热交换”,且无需重新启动系统。
你可能想要尝试使用 Boost.Extension,但需要注意的是:尽管其名称中含有 Boost,但它并不是 Boost 库之一。
这里是 它的文档链接。
对于C++插件,您可以查看本文,其中详细介绍了如何使用先前提到的posix调用来实现它。
引用文章:
考虑到我们可以使用这些函数来访问C库中的函数,那么我们如何使用它们来访问C++库中的类?有几个问题需要克服。其中一个问题是我们必须能够在库中定位所需的符号。由于C和C++文件中存储符号的方式不同,因此这比看起来更加棘手。
libltdl
的小型库,旨在将dlopen库的各种困难隐藏起来,使程序员可以使用。它由一些头文件和小的C源代码组成,可以与需要dlopening功能的应用程序一起分发。在某些平台上,其动态链接器过于有限,无法简单地实现libltdl
服务,因此需要GNU DLD,否则它只能使用libtool的dlpreopening机制来模拟动态链接。”dlopen
(Solaris、Linux和各种BSD版本)
- shl_load
(HP-UX)
- LoadLibrary
(Win16和Win32)
- load_add_on
(BeOS)
- NSAddImage
或NSLinkModule
(Darwin和Mac OS X)
- GNU DLD(模拟静态库的动态链接)
- libtool的dlpreopen(请参见Dlpreopening)dll
、UNIX ELF共享对象和Mac OS X Mach-O bundles。这对您来说可能已经足够了...