【问题标题】:Problem loading a DLL with boost DLL from a different path when it has dependencies当它具有依赖关系时,从不同的路径加载带有 boost DLL 的 DLL 时出现问题
【发布时间】:2019-06-27 15:14:09
【问题描述】:

我使用boost::dll 在运行时加载库。

使用以下代码,我可以加载一个 DLL,即使它与可执行文件位于不同的文件夹中:

auto creator = boost::dll::import_alias<pluginapi_create_t>(fileName, "createPlugin", boost::dll::load_mode::append_decorations);

但是当 DLL 有其他依赖项时,我遇到了问题。这是我的文件夹结构的示例:

Main Folder
|
|-program.exe
|
|-pluginsfolder
  |
  |-plugin1.dll
  |-plugin2.dll
  |-dependency.dll

如果我加载 plugin1.dll(没有其他依赖项),它就可以工作。

如果我加载plugin2.dll,则需要dependency.dll,它不起作用。

我想我可以将所有 DLL 放在同一个文件夹中,然后一切都将重新开始工作。但我想将插件保存在单独的文件夹中,因为我希望其他用户能够从他们各自的文件夹中加载插件。

无论插件在文件系统中的位置如何,如何加载具有依赖关系的插件?

【问题讨论】:

  • 查看 LOAD_LIBRARY_SEARCH_USER_DIRSLOAD_WITH_ALTERED_SEARCH_PATH 并点击此处描述中的链接:docs.microsoft.com/en-us/windows/desktop/api/libloaderapi/… 这如何转化为 Boost 我不知道。
  • 它们可以和boost::dll一起使用吗?我正在寻找一个跨平台的解决方案。
  • 我不知道,这些选项存在于操作系统级别。 DLL 和跨平台似乎很奇怪。
  • 这并不奇怪。它是关于在运行时加载库,所以我认为在 Linux 中使用 .so 文件也是同样的问题。

标签: c++ boost dll dllimport


【解决方案1】:

感谢 Richard cmets,我找到了解决方案。

这是命令:

auto creator = boost::dll::import_alias<pluginapi_create_t>(fileName, "createPlugin", boost::dll::load_mode::append_decorations | boost::dll::load_mode::load_with_altered_search_path);

我在加载时添加了boost::dll::load_mode::load_with_altered_search_path标志,同时搜索如何使用相应的LOAD_WITH_ALTERED_SEARCH_PATH by windows native。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多