代码之家  ›  专栏  ›  技术社区  ›  seb007

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

  •  0
  • seb007  · 技术社区  · 8 年前

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

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

    其他库目录:C:\OSGeo4W64\lib(其中gdal\u i.lib)

    其他依赖项:gdal_i.lib

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

    序号361在动态链接库SSLEAY32中找不到。动态链接库

    我可以通过复制SSLEAY32来修复它。从可执行文件文件夹中的gdal文件夹中删除dll,或者从代码中删除对gdal的任何调用,但我更愿意修复我的系统。如何告诉Windows查找正确的目录(我经常使用该路径,但没有成功)。

    使用依赖Walker,似乎gdal。dll不是我的OSGEO路径中的dll,而是从我的miniconda安装中获取的。有没有干净的方法来修复它?我认为如果一个库在同一个文件夹中有它的依赖项,那么就会使用那些依赖项。

    Dependency Walker screenshot

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

    添加 C: \OSGeo4W64\bin; 在我的路径的开始,这样正确的gdal202。dll优先使用。

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

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

    1 回复  |  直到 8 年前
        1
  •  2
  •   Pavan Chandaka    8 年前

    其他库目录 只会帮助查找。lib(静态库)文件,但不适用于DLL。

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

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

    因此,现在,如果要提取您想要的DLL,请将DLL放置在上面链接中所述的前4个步骤中的任何位置。。。。。或者您可以编辑路径变量 用户变量 属于 环境变量 ,以及您的DLL位置。

    因为

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