OpenCV zlibd1.dll找不到

同事编译了OpenCV3.4.9, cmake-gui中勾选了opencv world,也就是最终编出的库只有一个opencv_world.dll。debug模式下编译的,并且构建了INSTALL target(也就是执行了安装)。

然后添加了对应的bin目录到PATH环境变量。

使用opencv的程序demo,也是基于cmake构建的,也是debug模式。运行直接提示zlibd1.dll找不到。

解决办法:到OpenCV的编译目录下,开启git-bash, find . -name 'zlib1.dll'找到它,然后丢到刚才添加到PATH的新编译安装的opencv的bin目录。

吐槽:这个问题应该是只有debug模式下才出现,release模式下没有。opencv的官方cmake没有把这个dll拷贝到bin目录,23333.

////////////////////
update@2020-04-16 00:29:13
OpenCV 4.3.0,源码编译,非world单独库。编译安装后,应用程序使用此版本opencv,发现debug模式报“缺少zlib1d.dll”,release模式报“缺少zlib1.dll”。
比较异常的一点:每次生成的zlib1.dll的时间都是固定的。后来发现它是vcpkg路径下拷贝来的,例如:

D:/work/vcpkg/buildtrees/zlib/x86-windows-dbg/zlibd1.dll

比较好奇的是,vcpkg并不在系统PATH环境变量中,但为何编译imgcodec模块时,会找到vcpkg里的zlib1.dll,而不是opencv/3rdparty里的zlib静态库?要知道,cmake编译选项在Win下,默认是BUILD_ZLIB=ON的,并且我也没有指定它为OFF的。

vcpkg略坑,扔掉吧

//////////////////////
update@2020-09-25 08:49:50
最近分析了一下find_package(ZLIB)的过程,发现cmake安装包提供的FindZLIB.cmake挺坑的,只能找到动态库而找不到静态库;导致我先前错怪了vcpkg。

我魔改了一份 FindZLIB.cmake ,可以放在个人的CMAKE MODULE路径下,优先于cmake安装包提供的modules使用:能找到静态库和动态库,win/linux/macosx三系统支持。

vcpkg 也挺坑的,如果执行了 vcpkg integrate install 会自动集成在任何新打开的 .sln Visual Studio解决方案的每个target中(这ok),自动使用 vcpkg (这挺坑),自动从 vcpkg 下载的库目录里链接(这也坑)

虽然可以每个工程属性的 vcpkg 子页面里手动改,但这不通用;一劳永逸的解决办法是修改 vcpkg/scripts/buildsystem/vcpkg.props 文件:VcpkgEnabled的值修改为 false ,VcpkgAutoLink的值修改为 false:

<VcpkgEnabled Condition="'$(VcpkgEnabled)' == ''">false</VcpkgEnabled>

<VcpkgAutoLink Condition="'$(VcpkgAutoLink)' == ''">false</VcpkgAutoLink>

然后重开 .sln 文件,再看工程属性,默认值已经改掉:

posted @ 2019-12-30 21:14  ChrisZZ  阅读(927)  评论(0编辑  收藏  举报