Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C程序中动态加载外部模块?_C++_C_Dynamic_Modularity - Fatal编程技术网

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()。