在开发基于C/C++(= 2?)插件的框架时,需要支持实时交换共享对象/动态库,哪些示例有助于查看实现细节?基于C/C++插件的系统的良好模式?
谢谢。
注:现场交换是这里的关键点,不需要重新启动系统是一个要求
在开发基于C/C++(= 2?)插件的框架时,需要支持实时交换共享对象/动态库,哪些示例有助于查看实现细节?基于C/C++插件的系统的良好模式?
谢谢。
注:现场交换是这里的关键点,不需要重新启动系统是一个要求
你可能想尝试Boost.Extension,但要小心:尽管它的名字,它不是一个助推库。
对于C++插件,你可以检查this article哪些细节如何实现它与先前提到的posix调用。
引用的文章:
由于我们可以利用这些功能来访问在C库函数,我们如何在C++库用它们来访问类?有几个问题需要克服。一个是我们必须能够找到我们在图书馆需要的符号。这比看起来更复杂,因为符号存储在C和C++文件中的方式不同。
Boost.Extension看起来不错(从未使用它,但会尽快尝试)。另一种选择是POCO SharedLibrary class。
如果您希望跨平台的库加载而不必为每个平台的API单独开发,libltdl可能会有所帮助。
Libtool提供了一个小型库,名为
libltdl
,旨在隐藏程序员钻取图书馆的各种困难。它由几个头文件和小型C源文件组成,这些文件可以与需要钻取功能的应用程序一起分发。在某些平台上,其动态链接器对于简单实现libltdl
服务来说太有限了,它需要GNU DLD,或者它只会模拟与libtool的dlpreopening机制的动态链接。目前的libltdl支持以下动态链接机制:
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)
Boost.Extension似乎只支持Windows PE dll
S,UNIX ELF共享对象和Mac OS X Mach-O软件包。那么,这可能已经足够...
你可以详细说明操作系统吗? – 2009-04-24 11:39:56
请参阅http://stackoverflow.com/questions/384121/creating-a-module-system-dynamic-loading-in-c作为起点。 – unwind 2009-04-24 11:46:40
对于Windows /其他操作系统? – RobS 2009-04-24 12:11:46