【发布时间】:2010-09-17 17:41:11
【问题描述】:
我确信这个问题之前已经解决了,我很好奇它是如何完成的。我有代码,在运行时,我想扫描目录的内容并加载功能。
具体来说,我正在使用我希望能够添加函数调用的脚本引擎。我希望核心引擎提供非常有限的功能。用户应该能够通过 3rd 方库添加其他功能,我希望引擎扫描和加载这些功能。这是怎么做到的?
【问题讨论】:
标签: c++ c dynamic modularity
我确信这个问题之前已经解决了,我很好奇它是如何完成的。我有代码,在运行时,我想扫描目录的内容并加载功能。
具体来说,我正在使用我希望能够添加函数调用的脚本引擎。我希望核心引擎提供非常有限的功能。用户应该能够通过 3rd 方库添加其他功能,我希望引擎扫描和加载这些功能。这是怎么做到的?
【问题讨论】:
标签: c++ c dynamic modularity
这取决于平台。在 win32 上,您调用 LoadLibrary 来加载 DLL,然后使用 GetProcAddress 从其中获取函数。在 Unixy 平台上,等价物是 dlopen 和 dlsym。
【讨论】:
您可以在 Linux/UNIX 中使用 POSIX dlopen/dlsym/dlerror/dlclose 函数来动态打开共享库并访问它们提供的符号(包括函数),详情请参阅man page。
【讨论】:
如果您想为此使用库,我建议您使用 GLib(位于 GTK+ UI 工具包下方的实用程序库)。它具有“GModule”子 API,它提供了一种干净、可移植的方式来执行此操作。这使您不必自己包装相关调用,并且还为您带来了 GLib 的其余部分,在任何大小的 C 程序中非常很方便。
【讨论】: