opencv的静态编译(暨本机opencv在c++环境生成dll,在其他计算机上无法调用问题)

opencv的静态编译

暨本机opencv在c++环境生成dll,在其他计算机上无法调用问题

在开发一个opencv+dlib的人脸信息识别时,我成功打包的动态库dll在本机上运行的很安稳,开心的拿给技术部小美眉使用时,咦,不能使用了,报错无法加载dll,这不能忍!经过一番周折,其实原因如下。

本人是直接下载的opencv4.0,安装即使用,也未对其进行编译,所以在生成自己的dll动态库时,就会出现部分模块并未成功打包的问题,所以我们在输出一个基于opencv的c++动态库时,最好使用opencv源码生成静态库,纯净的dll大家都喜欢。

下面是我解决问题的步骤:

首先,打开我的opencv4.0安装装目录,找到sources:

opencv的静态编译(暨本机opencv在c++环境生成dll,在其他计算机上无法调用问题)_第1张图片

然后采用cmake编译即可,编译时注意取消勾选项:

opencv的静态编译(暨本机opencv在c++环境生成dll,在其他计算机上无法调用问题)_第2张图片

否则就会编译成动态库了,然后编译成功后你会看到这样一个目录结构:

opencv的静态编译(暨本机opencv在c++环境生成dll,在其他计算机上无法调用问题)_第3张图片

在目录中找到:

运行它,打开项目,你会看到:

opencv的静态编译(暨本机opencv在c++环境生成dll,在其他计算机上无法调用问题)_第4张图片

然后全部生成就可以得到静态opencv库,编译的过程可能有些长,耐心等待即可。

生成完成后你可能在想,那生成目录到哪里去了?别担心,还有一步你要做:

在此项上右击生成,等到完成后,你就可以在目录下找到自己的静态库了,release和debug版本自己选。

opencv的静态编译(暨本机opencv在c++环境生成dll,在其他计算机上无法调用问题)_第5张图片

接下来,把你原本直接使用的opencv库替换掉,使用静态库再次生成dll就可以了,具体操作如下:

首先,包含目录不能少,具体路径因人而异。

opencv的静态编译(暨本机opencv在c++环境生成dll,在其他计算机上无法调用问题)_第6张图片

然后,在你的代码中添加下面这些,就可以了,有人会问,这是在干什么,其实它们的含义就等于你在连接器输入中填写的。

opencv的静态编译(暨本机opencv在c++环境生成dll,在其他计算机上无法调用问题)_第7张图片

如果你不喜欢上面这种形式,在链接器中添加也可:

opencv的静态编译(暨本机opencv在c++环境生成dll,在其他计算机上无法调用问题)_第8张图片

提一下:并不是所有的lib都是必须填上的,需要什么功能就添加什么相关模块,你要是嫌弃会报无法识别的内部符号异常,全部添加也无妨,毕竟新时代的电脑性能上不在乎这么一丁点。

有一点差点忘记了,记得修改此处:MT,MTd,MD,MDd的区别请自行百度,网上大把解释。

opencv的静态编译(暨本机opencv在c++环境生成dll,在其他计算机上无法调用问题)_第9张图片

到这里就结束了,亲测再次生成的opencv-dll就可以在其他电脑上正常使用了。

你可能感兴趣的:(成长的步伐,c++,opencv,别人电脑无法使用,打包动态库dll)