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