200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > vscode配置opencv环境 包括opencv源码编译(mingw64 + cmake)

vscode配置opencv环境 包括opencv源码编译(mingw64 + cmake)

时间:2022-12-22 09:51:06

相关推荐

vscode配置opencv环境 包括opencv源码编译(mingw64 + cmake)

vscode使用了mingw64,在使用官网下载的opencv后,发现有函数提示功能,但是在调试时出现了各种opencv库中的各种函数未定义的情况(如下图代码所示的类型),然后突然明白过来,既然使用了mingw,那么相对应的opencv也应该使用mingw版本,但是官网不提供该版本的下载,那就只能自己编译一个该版本出来。

C:\Eulerian Real-Time OpenCV build\Realtime-Video-Magnification-master\build-rvm-Desktop_Qt_5_9_0_MinGW_32bit-Debug\debug\main.o:-1: In function `ZN2cv6StringaSERKS0_':E:\opencv\build\include\opencv2\core\cvstd.hpp:672: error: undefined reference to `cv::String::deallocate()'C:\Eulerian Real-Time OpenCV build\Realtime-Video-Magnification-master\src\main\threads\CaptureThread.h:42: error: undefined reference to `cv::VideoCapture::~VideoCapture()'

注意:使用的工具版本如下,一定要注意版本问题,如果使用的mingw64版本和opencv版本不对应,那简直是一个天坑,将会在mingw64-make 的时候无限报错,这简直能折磨死人。

首先提供一个opencv mingw版本的下载地址:

opencv-mingw

我的编译环境

mingw64-4.8.1

opencv-3.4.1

cmake-3.10,0

安装mingw64和cmake,记得首先配置mingw64和cmake的环境变量打开cmake-gui设置源码目录和编译目录电机configure,设置编译器为MinGW Makefiles如果设置好了环境变量,下方默认即可点击finish配置完成后,一片红,不要着急勾选ENABLE_CXX11和WITH_OPENGL,不勾选ENABLE_PRECOMPILED_HEADERS和WITH_IPP注意mingw64/x86_64-mingw32/include/aviriff.h文件第一行的注释少了一个“/”,添加,然后保存(此步骤非必须)继续点击cmake-gui的configure,配置结束后点击generate即可通过cmd进入编译目录,执行mingw32-make -j 8无错误后,执行mingw32-make install配置vscode和opencv环境

ERROR: During startup program exited with code 0xc0000135.

配置c_cpp_properties(今天大概服务器有问题,代码一粘贴网页就卡死,先跳过这三个配置文件,改天来补充)

{

"configurations": [

{

"name": "Win32",

"includePath": [

"D:/opencv-3.4.1/mingw-x64-install/install/include",

"${workspaceFolder}/**",

"D:/opencv-3.4.1/mingw-x64-install/install/include/opencv",

"D:/opencv-3.4.1/mingw-x64-install/install/include/opencv2"

],

"defines": [

"_DEBUG",

"UNICODE",

"_UNICODE"

],

"compilerPath": "D:\\mingw64\\bin\\gcc.exe",

"cStandard": "c11",

"cppStandard": "c++17",

"intelliSenseMode": "clang-x64"

}

],

"version": 4

}

请注意:关键代码为 "includePath"里的内容,这里需要将opencv里的头文件包含进来。

配置launch

{

"version": "0.2.0",

"configurations": [

{

"name": "(gdb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示

"type": "cppdbg", // 配置类型,这里只能为cppdbg

"request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)

"program": "${workspaceRoot}/build/${fileBasenameNoExtension}.exe",// 将要进行调试的程序的路径

"args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可

"stopAtEntry": false, // 设为true时程序将暂停在程序入口处,一般设置为false

"cwd": "${workspaceRoot}", // 调试程序时的工作目录,一般为${workspaceRoot}即代码所在目录

"environment": [],

"externalConsole": true, // 调试时是否显示控制台窗口,一般设置为true显示控制台

"MIMode": "gdb",

//"miDebuggerPath": "D:\\Mingw\\bin\\gdb.exe",

"miDebuggerPath": "D:\\mingw64\\bin\\gdb.exe", // miDebugger的路径,注意这里要与MinGw的路径对应

"preLaunchTask": "g++", // 调试会话开始前执行的任务,一般为编译程序,c++为g++, c为gcc

"setupCommands": [

{

"description": "Enable pretty-printing for gdb",

"text": "-enable-pretty-printing",

"ignoreFailures": true

}

]

}

]

}

请注意:此处的关键代码为"miDebuggerPath"里的语句,里面包含gdb.exe的目录地址;"program"里为调试程序的路径,之所以放到build里,是因为如果包含了动态链接库,那么动态链接库需要拷贝到和编译的.exe文件相同目录下,和tasks.json文件里的args参数相对应。

配置tasks

{

"version": "2.0.0",

"command": "g++",

"args": ["-g","${file}","-o","build/${fileBasenameNoExtension}.exe",

"-I", "D:/opencv-3.4.1/mingw-x64-install/install/include",

"-I", "D:/opencv-3.4.1/mingw-x64-install/install/include/opencv",

"-I", "D:/opencv-3.4.1/mingw-x64-install/install/include/opencv2",

"-L", "D:/opencv-3.4.1/mingw-x64-install/install/x64/mingw/bin/lib*",

],

"problemMatcher": {

"owner": "cpp",

"fileLocation": ["relative", "${workspaceRoot}"],

"pattern": {

"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",

"file": 1,

"line": 2,

"column": 3,

"severity": 4,

"message": 5

}

}

}

注意:这里的关键代码是args里的参数,这里“-g”定义了编译出的.exe文件的存放目录(和c_cpp_properties文件相对应),“-I”里的参数和c_cpp_properties文件相对应,“-L”里定义了所编译出的opencv里的库文件的包含目录(需要拷贝到和.exe相同目录)。

写测试代码后,执行,发现console一闪而逝,无报错。上述错误,是因为引入的库没有正确链接到导致的,将之前编译好的opencv-mingw包里的install/x64/mingw/bin里的文件拷贝出来,拷贝到vscode中测试代码的当前目录,再次执行,发现控制台不再消失,一切正常。经过测试后发现,这是因为在windows下所编译出的.exe文件(通过task.json配置)需要和库文件在同一个目录,所以养成良好的工作目录环境配置是必要的。建议的目录:

workspace

.vscode

c_cpp_properties.json

launch.json

tasks.json

include

(所包含的头文件等,建议,也可以直接将头文件放在src)

build

(各种库文件等依赖的内容)

src

(源码)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。