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

Shared libraries on Windows - dependencies using wrong dll

我有一个使用 gdal 作为库的 C++ 代码。在 visual studio 2013 上使用英特尔 C++ 编译器 16 编译。

在配置中,我将gdal库路径和库文件指定为link with:

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

附加依赖项:gdal_i.lib

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

无法在动态 link 库中找到序号 361 SSLEAY32.dll

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

使用 Dependency Walker,似乎 gdal.dll 不是来自我的 OSGEO 路径,而是来自我的 miniconda 安装。有没有一种干净的方法来修复它?我虽然如果一个库在同一个文件夹中有它的依赖项,那些将被使用。

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

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

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

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

附加库目录 仅有助于查找 .lib(静态库)文件,而不是 DLL。

DLL 的查找顺序如下 link。

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

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

因为

User variables take precedence over system environment variables. The user path is appended to the system path.