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

时间:2017-12-07 20:37:10

标签: c++ dll linker shared-libraries lib

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

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

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

附加依赖项:gdal_i.lib

它曾经在几个月前工作过,但我的系统中必定会有所改变。现在,当我尝试我的可执行文件时,我得到一个错误的弹出窗口:

序号361无法位于动态链接库SSLEAY32.dll

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

使用Dependency Walker,似乎gdal.dll不是我的OSGEO路径中的那个,而是取自我的miniconda安装。有没有一个干净的方法来解决它?我虽然如果一个库在同一个文件夹中有它的依赖项,那么就会使用它们。

Dependency Walker screenshot

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

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

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

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

1 个答案:

答案 0 :(得分:1)

其他库目录将仅用于查找.lib(静态库)文件,但不能用于查找DLL。

查找DLL,如下面链接中的顺序所示。

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

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

因为

  

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