软件版本:
Qt 5.12.8,MSVC2017 64bit
Opencv:4.2.0
海康MVS:4.0.0
准备:
1. 确保opencv和mvs本地配置环境无误:比如安装版本,系统环境变量...
2. 在QT的.pro文件中,调用这俩库没有问题,示例如下(自己用的什么版本就调整,不要完全复制):
#调用OPencv库release版本选择这条:
LIBS += -LD:/openCV/build/x64/vc15/lib/ -lopencv_world420
#debug版本选择这条(不能同时调用):
#LIBS += -LD:/openCV/build/x64/vc15/lib/ -lopencv_world420d
INCLUDEPATH += D:/openCV/opencv/build/x64/vc15
DEPENDPATH += D:/openCV/opencv/build/x64/vc15
INCLUDEPATH += D:/OpenCV/opencv/build/include \
D:/OpenCV/opencv/build/include/opencv \
D:/OpenCV/opencv/build/include/opencv2
DEPENDPATH += D:/OpenCV/opencv/build/include \
D:/OpenCV/opencv/build/include/opencv \
D:/OpenCV/opencv/build/include/opencv2
#调用海康SDK
INCLUDEPATH += $$PWD/include/CameraSDK
DEPENDPATH += $$PWD/include/CameraSDK
#根据电脑64还是32位选择
LIBS += -L$$PWD/lib/CameraSDK/win64/ -lMvCameraControl\
3.软件在本地QT运行时无误
问题:
使用QT自带打包指令windeployqt打包完之后,本地运行正常,但是将exe文件夹在别的电脑运行会出现下列错误:
1. 由于找不到opencv_world420.dll,无法执行代码:
解决:将这个.dll直接复制到exe文件夹中
2. 直接点击软件出现程序无法正常启动,使用管理员运行出现报错:无法定位程序输入点MV_CC_GetEnumEntrySymbolic于动态链接库...exe上
解决:经过查询知道MV_CC_GetEnumEntrySymbolic是海康sdk中的接口函数,但是库调用及本地执行都没有问题,但是另一台电脑执行不了,因为在另一台电脑上缺少相应的动态库
所以我们需要找到海康MVS下的动态库,找了半天才知道动态库是runtime下的,不在MVS的安装路径下,在C:\Program Files (x86)\Common Files\MVS\Runtime"路径下,就可以找到SDK所依赖的动态库文件,将该文件夹下的.dll全部复制到exe文件夹中即可成功运行(要使用管理员打开)