同事编译了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略坑,扔掉吧