调用了opencv的C++程序调试运行没有问题,但一运行exe就报错debug error R6010

本文介绍了一种在使用OpenCV库时遇到的debugerror问题及其解决方案。问题表现为在VS2010上调试正常,但运行debug文件夹下的exe时出现错误。经过排查发现是由于模型文件的路径设置为相对路径而非绝对路径导致。文章还总结了OpenCV常见错误原因。

问题描述:最近做项目的时候,发现调用了opencv库的C++程序在VS2010上调试运行完全没有问题,但是一旦运行debug文件下的exe文件就显示debug error,具体报错如图:


虽然在调用opencv库的时候也遇到过这种问题,但是基本都是参数错误,指针问题,但是这次明明debug调试的时候完全没有问题,但是运行exe就出错了,

一直百思不得其解,后面在运行另外一个小程序的时候突然跳出了一个一样的bug,我才突然发现,居然是因为路径的问题!

我的项目程序需要加载一个模型文件,但是我的路径上一开始设的是相对路径,即直接放在工程目录下的。

在调试的时候我明明看到文件被加载了进来,所以也就没考虑过文件加载的问题。

后面通过逐一注释排除才发现居然是因为没把路径设成绝对路径,导致opencv函数在读取文件的时候找不到文件,读取进来的模型是空的。

然后我又把空的模型用于预测,于是就报了debug error的错。

之后把文件路径改成绝对路径就没有问题了。

所以,以后写程序的时候还是尽量多用绝对路径,不然真出错的时候连问题在哪都找不到!

这里顺便总结一下常见的opencv出这种错误的原因:

1.指针问题,指针越界,内存泄露之类的。

2.参数问题,很多时候opencv函数调用不准确,参数和函数不匹配。

3.路径问题,如果有读取文件之类的话这种得重点注意。

<think>我们正在处理的是在Ubuntu系统下使用VSCode编译调试调用OpenCV库的C++程序的配置方法。结合之前的错误(关于libIlmImf-2_3.so.24找不到)和引用内容,我们需要确保: 1. 正确安装OpenCV(包括配置pkg-config,以便于查找OpenCV的库和头文件)。 2. 在VSCode中配置三个重要的json文件:c_cpp_properties.json(用于IntelliSense)、tasks.json(编译任务)、launch.json(调试配置)。 3. 特别注意库路径的设置,避免出现动态库找不到的问题。 以下为详细步骤: ### 1. 确保OpenCV安装正确并配置pkg-config 在Ubuntu上安装OpenCV后,需要确保`pkg-config`可以找到OpenCV。在终端中运行: ```bash pkg-config --libs --cflags opencv4 ``` 如果正常输出编译选项和链接选项,则说明配置正确。如果没有,可能需要设置环境变量`PKG_CONFIG_PATH`,例如: ```bash export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH ``` 然后将此环境变量添加到`~/.bashrc`中永久生效。 ### 2. 配置VSCode的json文件 #### 2.1 c_cpp_properties.json(用于IntelliSense) 此文件用于配置头文件路径和编译器设置,使得代码提示和跳转正确。在VSCode中按`Ctrl+Shift+P`,输入`C/C++: Edit Configurations (UI)`,或者直接在`.vscode`文件夹中创建`c_cpp_properties.json`。配置示例: ```json { "configurations": [ { "name": "Linux", "includePath": [ "${workspaceFolder}/**", // 添加OpenCV的头文件路径,根据安装路径调整 "/usr/local/include/opencv4" ], "defines": [], "compilerPath": "/usr/bin/g++", // 使用g++编译器 "cStandard": "c11", "cppStandard": "c++17", "intelliSenseMode": "clang-x64", "configurationProvider": "ms-vscode.cmake-tools" // 如果使用CMake则启用 } ], "version": 4 } ``` #### 2.2 tasks.json(编译任务) 这个文件用于定义编译任务(相当于在命令行中使用g++编译)。创建或修改`.vscode/tasks.json`: ```json { "version": "2.0.0", "tasks": [ { "label": "build opencv program", // 任务名称,与launch.json中的preLaunchTask对应 "type": "shell", "command": "g++", "args": [ "-g", // 生成调试信息 "${file}", // 当前文件 "-o", "${workspaceFolder}/build/${fileBasenameNoExtension}", // 输出到build目录 // 使用pkg-config获取OpenCV的编译选项 "`pkg-config --cflags --libs opencv4`" ], "group": { "kind": "build", "isDefault": true }, "problemMatcher": [] } ] } ``` 注意:这里使用了反引号执行pkg-config命令,如果遇到问题,可以尝试将pkg-config的输出直接写为字符串(但这样不够灵活),或者使用个shell脚本来封装编译命令。 #### 2.3 launch.json(调试配置) 此文件用于配置调试器。在VSCode中,切换到调试视图,点击“创建launch.json文件”或者手动创建: ```json { "version": "0.2.0", "configurations": [ { "name": "Debug opencv", // 配置名称 "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/build/${fileBasenameNoExtension}", // 可执行文件路径 "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, // 如果需要在外部控制台运行,设为true(Linux下可能不支持) "MIMode": "gdb", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "build opencv program", // 必须与tasks.json中的label致 "miDebuggerPath": "/usr/bin/gdb" } ] } ``` ### 3. 解决动态库加载问题 即使编译通过,运行时可能还会出现动态库找不到的情况(如之前提到的libIlmImf-2_3.so.24)。解决方法: #### 方法1:在launch.json中设置环境变量`LD_LIBRARY_PATH` ```json "environment": [ { "name": "LD_LIBRARY_PATH", "value": "/home01/gitcode/APA_SOC/OSS/lib/linux-x86/opencv-4.4:${env:LD_LIBRARY_PATH}" } ], ``` #### 方法2:使用系统级配置(推荐) 将OpenCV的库路径添加到系统库配置中(需要root权限): ```bash sudo sh -c 'echo "/home01/gitcode/APA_SOC/OSS/lib/linux-x86/opencv-4.4" > /etc/ld.so.conf.d/opencv.conf' sudo ldconfig ``` ### 4. 测试 创建个简单的OpenCV程序(例如显示张图片)进行测试: ```cpp #include <opencv2/opencv.hpp> using namespace cv; int main() { Mat image = imread("test.jpg"); imshow("Display window", image); waitKey(0); return 0; } ``` 按F5进行调试,程序应能正常运行并显示图片。 ### 注意事项 - 如果使用非系统默认安装的OpenCV(比如自己编译安装在自定义路径),需要确保在编译和运行时都能找到对应的库和头文件。 - 在tasks.json中使用pkg-config命令时,确保OpenCV的pkg-config文件(opencv4.pc)在PKG_CONFIG_PATH指定的目录下。 通过以上步骤,应该能够在VSCode中成功编译调试调用OpenCVC++程序。 --- ### 相关问题 1. 如何在Ubuntu上安装OpenCV并配置环境变量? 2. 如何使用CMake在VSCode中配置OpenCV项目? 3. 如何解决VSCode调试时动态库加载失败的问题? </think>### Ubuntu下VSCode编译调试C++程序调用OpenCV库的完整配置方法 #### 1. **安装必要依赖** ```bash sudo apt update sudo apt install build-essential cmake gdb pkg-config libopencv-dev ``` #### 2. **验证OpenCV安装** ```bash pkg-config --modversion opencv4 # 应显示4.x.x版本 pkg-config --cflags --libs opencv4 # 检查头文件和库路径 ``` #### 3. **VSCode配置步骤** 在项目根目录创建`.vscode`文件夹,包含三个配置文件: **a. c_cpp_properties.json** - 配置IntelliSense ```json { "configurations": [ { "name": "Linux", "includePath": [ "${workspaceFolder}/**", "/usr/include/opencv4" // OpenCV头文件路径 ], "defines": [], "compilerPath": "/usr/bin/g++", "cppStandard": "c++17", "intelliSenseMode": "linux-gcc-x64" } ], "version": 4 } ``` **b. tasks.json** - 编译任务配置 ```json { "version": "2.0.0", "tasks": [ { "label": "build-opencv", "type": "shell", "command": "g++", "args": [ "-g", // 生成调试信息 "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}", "`pkg-config --cflags --libs opencv4`" // 自动获取OpenCV参数 ], "group": { "kind": "build", "isDefault": true } } ] } ``` **c. launch.json** - 调试配置 ```json { "version": "0.2.0", "configurations": [ { "name": "Debug OpenCV", "type": "cppdbg", "request": "launch", "program": "${fileDirname}/${fileBasenameNoExtension}", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [{ "name": "LD_LIBRARY_PATH", "value": "/usr/local/lib" // OpenCV库路径 }], "externalConsole": false, "MIMode": "gdb", "preLaunchTask": "build-opencv" // 编译任务名 } ] } ``` #### 4. **测试代码示例** 创建`test_opencv.cpp`: ```cpp #include <opencv2/opencv.hpp> using namespace cv; int main() { Mat image = imread("test.jpg"); if(image.empty()) { printf("Error loading image\n"); return -1; } imshow("OpenCV Test", image); waitKey(0); return 0; } ``` #### 5. **编译调试流程** 1. 保存所有配置文件 2. 打开测试代码文件 3. 按`F5`启动调试: - 自动编译生成可执行文件 - 启动GDB调试器 - 可设置断点、检查变量 #### 6. **常见问题解决** 1. **库路径错误**:在`launch.json`中确认`LD_LIBRARY_PATH`包含OpenCV库路径 ```bash sudo find / -name "libopencv_*" 2>/dev/null # 查找库位置 ``` 2. **pkg-config失效**:手动指定路径: ```json "args": [ "-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}", "-I/usr/include/opencv4", "-lopencv_core", "-lopencv_imgcodecs", "-lopencv_highgui" ] ``` 3. **调试崩溃**:在`launch.json`中添加: ```json "setupCommands": [{ "description": "Enable GDB pretty printing", "text": "-enable-pretty-printing", "ignoreFailures": true }] ``` #### 7. **最终效果验证** ```mermaid graph LR A[编辑代码] --> B[按F5调试] B --> C[自动编译] C --> D[加载调试会话] D --> E[断点调试] E --> F[图像窗口显示] ``` 成功运行时将显示加载的图像窗口,表明OpenCV调用正确[^1][^2]。 --- ### 相关问题 1. CMake项目如何配置VSCode调试OpenCV程序? 2. 如何解决VSCode调试时"Unable to start debugging"错误? 3. OpenCV在不同Ubuntu版本中的安装差异有哪些?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值