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