Windows 上的共享库 - 使用错误的 dll 的依赖项

问题描述 投票:0回答:1

我有一个使用 gdal 作为库的 C++ 代码。在 Visual Studio 2013 上使用 intel C++ 编译器 16 编译。

在配置中,我指定要链接的gdal库路径和库文件:

其他库目录:C:\OSGeo4W64\lib(其中 gdal_i.lib 位于)

其他依赖项:gdal_i.lib

几个月前它还可以工作,但我的系统一定发生了一些变化。现在,当我尝试我的可执行文件时,我收到一个弹出窗口,其中包含错误:

动态链接库SSLEAY32.dll中找不到序号361

我可以通过从可执行文件夹中的 gdal 文件夹复制 SSLEAY32.dll 或从我的代码中删除对 gdal 的任何调用来修复它,但我更想修复我的系统。如何告诉 Windows 在正确的目录中查找(我多次使用 PATH 但没有成功)。

使用 Dependency Walker,似乎 gdal.dll 不是来自我的 OSGEO 路径,而是来自我的 miniconda 安装。有干净的方法来修复它吗?我认为如果一个库的依赖项位于同一文件夹中,那么将使用这些依赖项。

Dependency Walker screenshot

编辑:解决方案,感谢 Naidu 的回答:

在路径开头添加C:\OSGeo4W64 in;,以便优先使用正确的gdal202.dll。

但是现在python不再启动,因为它不是在miniconda文件夹中选择自己的gdal库,而是在OSGeo4W64中......我可以让其中一个或另一个使用相同的路径,但不能同时使用两个

解决方案 首先将 Miniconda python 可执行文件的目录放在 PATH 中,然后是 OSGeo4W64 库路径,然后是 Miniconda 库路径

c++ dll linker shared-libraries
1个回答
2
投票

其他库目录仅有助于查找.lib(静态库)文件,但对DLL没有帮助。

按照以下链接中的顺序查找 DLL。

https://msdn.microsoft.com/en-us/library/7d83bc18.aspx

所以现在,如果要获取您想要的 DLL,则将该 DLL 放置在上面链接中所述的前 4 个步骤中的任何位置......或者您可以编辑 用户变量 的 PATH 变量环境变量,以及您的 DLL 位置。

因为

用户变量优先于系统环境变量。这 用户路径附加到系统路径。

© www.soinside.com 2019 - 2024. All rights reserved.