在C程序中动态加载外部模块?

时间:2008-10-17 12:28:33

标签: c++ c dynamic modularity

我确信这个问题以前已经解决了,我很好奇它是如何完成的。我有代码,在运行时,我想扫描目录的内容并加载功能。

具体来说,我正在使用脚本引擎,我希望能够添加函数调用。我希望核心引擎提供非常有限的功能。用户应该能够通过第三方库添加其他功能,我希望引擎扫描并加载。这是怎么做到的?

3 个答案:

答案 0 :(得分:6)

这取决于平台。在win32上,您调用LoadLibrary加载DLL,然后使用GetProcAddress从中获取函数。在Unixy平台上,等价物是dlopendlsym

答案 1 :(得分:4)

您可以使用Linux / UNIX中的POSIX dlopen / dlsym / dlerror / dlclose函数动态打开共享库并访问它们提供的符号(包括函数),有关详细信息,请参阅man page

答案 2 :(得分:3)

如果你想为此使用库,我建议使用GLib(位于GTK + UI工具包下面的实用程序库)。它具有“GModule”子API,它提供了一种干净,可移植的方式。这样您就不必自己包装相关的调用,并且还可以为您提供任何大小的C程序中非常方便的其余GLIB。