C++ 在C程序中动态加载外部模块?
我相信这个问题以前已经解决了,我很好奇它是怎么解决的。我有一些代码,在运行时,我希望扫描目录的内容并加载功能C++ 在C程序中动态加载外部模块?,c++,c,dynamic,modularity,C++,C,Dynamic,Modularity,我相信这个问题以前已经解决了,我很好奇它是怎么解决的。我有一些代码,在运行时,我希望扫描目录的内容并加载功能 具体来说,我使用的是一个脚本引擎,我希望能够向其添加函数调用。我希望核心引擎提供非常有限的功能。用户应该能够通过第三方库添加其他功能,我希望引擎能够扫描并加载这些功能。这是如何做到的?这取决于平台。在win32上,调用LoadLibrary加载DLL,然后使用GetProcAddress从中获取函数。在Unixy平台上,等价物是dlopen和dlsym您可以使用Linux/UNIX中的P
具体来说,我使用的是一个脚本引擎,我希望能够向其添加函数调用。我希望核心引擎提供非常有限的功能。用户应该能够通过第三方库添加其他功能,我希望引擎能够扫描并加载这些功能。这是如何做到的?这取决于平台。在win32上,调用
LoadLibrary
加载DLL,然后使用GetProcAddress
从中获取函数。在Unixy平台上,等价物是dlopen
和dlsym
您可以使用Linux/UNIX中的POSIX dlopen/dlsym/dlerror/dlclose函数动态打开共享库并访问它们提供的符号(包括函数),有关详细信息,请参阅。如果您想为此使用库,我建议使用GLib(位于GTK+UI工具包下面的实用程序库)。它的功能是“”sub API,它提供了一种干净、可移植的方法。这使您不必自己包装相关调用,也为您带来了其他的GLib,这在任何大小的C程序中都非常方便。您可以在现有程序中找到许多示例。无耻的插件:我的程序echoping是一个相对简单的例子使用dlopen()。