【问题标题】:Dynamically Loading External Modules in a C Program?在 C 程序中动态加载外部模块?
【发布时间】:2010-09-17 17:41:11
【问题描述】:

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

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

【问题讨论】:

    标签: c++ c dynamic modularity


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 您可以在现有程序中找到许多示例。无耻的插件:我的程序回显echoping.sourceforge.net 是使用dlopen() 的一个相对简单的例子。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-22
        • 2019-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多