我正在尝试使用OpenCV库编写一个C++应用程序。根据OpenCV维护人员的建议,我正在使用CMake生成Makefile。我的平台是Windows 7(64位)。我的编译器是MinGW(因此我正在使用“mingw 32-make”工具来构建应用程序)。
现在,我正在尝试确保我的设置是正确的,这样我就可以继续编写代码。我已经验证了OpenCV库已经正确构建。然后,我尝试验证我可以使用CMake将OpenCV库包含在我的构建中。我使用的是OpenCV教程中的以下示例代码:
DisplayImage.cpp
#include <cv.h>
#include <highgui.h>
using namespace cv;
int main( int argc, char** argv )
{
Mat image;
image = imread( argv[1], 1 );
if (argc != 2 || !image.data)
{
printf( "No image data \n" );
return -1;
}
namedWindow( "Display Image", CV_WINDOW_AUTOSIZE );
imshow( "Display Image", image );
waitKey(0);
return 0;
}
CMakeLists.txt
cmake_minimum_required( VERSION 2.8 )
project( DisplayImage )
find_package( OpenCV REQUIRED )
add_executable( DisplayImage DisplayImage )
target_link_libraries( DisplayImage ${OpenCV_LIBS} )
我使用cmake-gui生成Makefile,然后使用mingw 32-make构建应用程序。一切正常,程序编译时没有错误。但是,当我尝试运行它时,Windows停止并抱怨它需要libopencv_core231.dll。我检查了一下,这个dll在我的(OpenCV Build location)/bin目录中。我如何让CMake/MinGW在编译时包含它?
4条答案
按热度按时间zbwhf8kr1#
复制opencv dlls到你的可执行文件夹.
q3aa05252#
在我的例子中,我使用visual Studio(它支持构建树中的多个配置)寻找一些工作的东西,该命令将被稍微修改。
第一个:获取输出dll(构建为唯一的opencv_world库)
然后您可以添加一个命令:
nzrxty8p3#
我使用
configure_file(...)
,当指定的.dll
文件更改(很少)时,它会复制这些文件,以使用${_OpenCV_LIB_PATH}
进行正确的编译。mu0hgdu04#
下面是我想出的解决方案:
opencv_world470.dll
已经在我的路径,而我正在开发,所以当启动调试器或应用程序本地,我是确定的。现在进行安装,使用WIX或NSIS进行cpack,从目标
opencv_world
获取属性,以了解设备上的dll位置,以便稍后将其打包--当然还有opencv的许可证文件...