Ubuntu下VSCode调试C++程序以及opencv库和Qt5库
1.自述
自己用VSCode已经三年多了,大多数是写python程序,偶尔也写C++程序,但也不复杂,也不牵扯其他第三方库,就算牵扯第三方库,也大多是先写好CMakeLists文件,然后用标准的cmake… make流程编译和运行它。但是今天突然想用VSCode的调试功能,程序是以前写好的C++程序,涉及opencv和Qt库,然后就是各种配置、各种尝试,先后出现多种莫名奇妙的错误提示,但最后还是把它搞定了,所以记录下来,一是让自己以后忘记了还可以快速查找,二是让还在VScode上折腾C++调试的同学一些提示:
2.配置三个json文件
2.1 launch.json
{"version": "0.2.0","configurations": [{"name": "g++ - Build and debug active file","type": "cppdbg","request": "launch","program": "${workspaceRoot}/test","args": [],"stopAtEntry": false,"cwd": "${workspaceFolder}","environment": [],"externalConsole": true,"MIMode": "gdb","setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}],"preLaunchTask": "test","miDebuggerPath": "/usr/bin/gdb"}]
}
此文件要注意的3个地方,第一:“program”: “${workspaceRoot}/test”,表示程序编译build后生成的文件路径和名字(此处可执行文件名为test);第二:“preLaunchTask”: “test”,这个参数即是你F5调试运行时的可执行程序,名字要跟"program"一样;第三:此生成文件名必须要跟task.json中"label"关键字的名字相同,同时最好跟"args“关键字生成的可执行文件名字相同,免得乱七八糟的各种找不到错误。
2.2 task.json
请注意其中的"label"关键字和g++命令-o生成的可执行文件名字”test“。
{"version": "2.0.0","tasks": [{"label": "test","type": "shell","command": "g++","args": ["-g","-std=c++11","${workspaceRoot}/src/*.cpp","-o","test","-I","/usr/local/include","-I","${workspaceRoot}/include","-I","/usr/local/include/opencv4","-I","/usr/local/include/opencv4/opencv2","-I","/home/jiaken2660/Qt5.9.9/5.9.9/gcc_64/include","-L","/usr/local/lib","-L","/home/jiaken2660/Qt5.9.9/5.9.9/gcc_64/lib","-l","opencv_aruco","-l","opencv_bgsegm","-l","opencv_bioinspired","-l","opencv_calib3d","-l","opencv_ccalib","-l","opencv_core","-l","opencv_datasets","-l","opencv_dnn_objdetect","-l","opencv_dnn","-l","opencv_dpm","-l","opencv_face","-l","opencv_features2d","-l","opencv_flann","-l","opencv_freetype","-l","opencv_fuzzy","-l","opencv_hfs","-l","opencv_highgui","-l","opencv_imgcodecs","-l","opencv_img_hash","-l","opencv_imgproc","-l","opencv_line_descriptor","-l","opencv_ml","-l","opencv_objdetect","-l","opencv_optflow","-l","opencv_phase_unwrapping","-l","opencv_photo","-l","opencv_plot","-l","opencv_reg","-l","opencv_rgbd","-l","opencv_saliency","-l","opencv_shape","-l","opencv_stereo","-l","opencv_stitching","-l","opencv_structured_light","-l","opencv_superres","-l","opencv_surface_matching","-l","opencv_text","-l","opencv_tracking","-l","opencv_videoio","-l","opencv_video","-l","opencv_videostab","-l","opencv_xfeatures2d","-l","opencv_ximgproc","-l","opencv_xobjdetect","-l","opencv_xphoto","-l","icui18n","-l","icuuc","-l","icudata"],"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true}}]
}
2.3 c_cpp_properties.json
这个文件用来配置第三方库的头文件查找目录,这里我用到了opencv和Qt5.
{"configurations": [{"name": "Linux","includePath": ["${workspaceFolder}/**","/usr/local/include/opencv4/opencv2","/home/jiaken2660/Qt5.9.9/5.9.9/gcc_64/include","/home/jiaken2660/Qt5.9.9/5.9.9/gcc_64/include/QtCore","/home/jiaken2660/Qt5.9.9/5.9.9/gcc_64/include/QtGui","/home/jiaken2660/Qt5.9.9/5.9.9/gcc_64/include/QtQml","/home/jiaken2660/Qt5.9.9/5.9.9/gcc_64/include/QtQuick","/home/jiaken2660/Qt5.9.9/5.9.9/gcc_64/include/QtWidgets"],"browse": {"path": ["/home/jiaken2660/Qt5.9.9/5.9.9/gcc_64/include","/home/jiaken2660/Qt5.9.9/5.9.9/gcc_64/include/QtCore","/home/jiaken2660/Qt5.9.9/5.9.9/gcc_64/include/QtGui","/home/jiaken2660/Qt5.9.9/5.9.9/gcc_64/include/QtQml","/home/jiaken2660/Qt5.9.9/5.9.9/gcc_64/include/QtQuick","/home/jiaken2660/Qt5.9.9/5.9.9/gcc_64/include/QtWidgets","${workspaceRoot}"]},"defines": [],"compilerPath": "/usr/bin/gcc","cStandard": "gnu11","cppStandard": "c++11","intelliSenseMode": "clang-x64"}],"version": 4
}
3.常见错误
3.1 Opencv错误
此处假设opencv安装是没有问题的,因为我用cmake和make生成程序是没问题的,这里主要是没有正确链接到opencv库,请看task.json的配置方式,此处跟写CMakeLists文件有点不一样,前面不需要lib打头,后面也不需要.so结尾。
undefined reference to `cv::imread(std::string const&, int)'
undefined reference to `cv::noArray()'
undefined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)'
undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)'
undefined reference to `cv::imwrite(std::string const&, cv::_InputArray const&, std::vector<int, std::allocator<int> > const&)'
undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)'
undefined reference to `cv::imshow(std::string const&, cv::_InputArray const&)'
undefined reference to `cv::waitKey(int)'
3.2 Qt错误
此处提示有点看不懂,初看是libQt5Core.so.5链接不对,所以始终没找到解决的方式,后来就想先把warning解决吧,于是把libicui18n.so.56、libicuuc.so.56和libicudata.so.56作为链接库加到task.json文件中,问题解决。
/usr/bin/ld: warning: libicui18n.so.56, needed by //opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libicuuc.so.56, needed by //opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libicudata.so.56, needed by //opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5, not found (try using -rpath or -rpath-link)
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘u_strToLower_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucnv_getStandardName_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucnv_getAlias_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘uenum_next_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘u_strToUpper_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucnv_setSubstChars_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucal_getTimeZoneDisplayName_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucnv_fromUnicode_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘u_errorName_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘uenum_close_56’未定义的引用
...
3.3 其他错误
要想没有其他错误,请看第一节三个文件的配置,尤其是文件名必须一致。
Ubuntu下VSCode调试C++程序以及opencv库和Qt5库相关推荐
- ubuntu下vscode调试开发踩过的坑
最近刚过安装了中文版的ubuntu18.04.1,安装完之后想在ubuntu上安装vscode做c/c++的开发调试,踩了不少坑,在此记录一下,希望大家在这条路上不要再踩同样的坑. 1.安装vscod ...
- ubuntu下 vscode 配置c++ 环境和opencv
先放链接 19年的,重点讲cv的配置与编译 要看准路径 这篇重点讲vscode的配置 建议多试几遍,加深理解 vscode配置这篇讲的比较好,和cv无关 要是报错动态库连接失败 官方教程
- Ubuntu18.04下VScode调试方法
Ubuntu18.04下VScode调试教程 一.调试准备 二.需要创建哪些相关配置文件? 1.创建task.json文件 2.创建launch.json文件 3.创建c_cpp_properties ...
- ubuntu下VSCode的配置
字体配置 在设置中搜索'font',在'Editor: Font family'中修改, 如下是Ubuntu下VSCode默认字体设置 'Droid Sans Mono', 'monospace', ...
- Windows11 WSL2 ubuntu中vscode调试代码
Windows11 WSL2 ubuntu中vscode调试代码 Windows11 WSL2 ubuntu开发环境使用分享 第一章 Windows11 WSL2 安装ubuntu18.04并运行RO ...
- windows下VSCode调试时找不到文件的一种原因
windows下VSCode调试时找不到文件的一种原因 使用gdb进行 debug调试时 报错:Unable to start debugging. Unexpected GDB output fro ...
- ubuntu下如何安装两个版本OpenCV?
本文首发于微信公众号「3D视觉工坊」--ubuntu下如何安装两个版本OpenCV? 前言 由于在VSLAM技术研究过程中,经常会涉及OpenCV不同版本在ubuntu系统下的安装.因此小凡在此简单总 ...
- qt程序在Linux下字体乱了,解决linux/Ubuntu下Qt creater 界面程序在编译运行后无法显示中文或中文乱码问题!...
本文解决的主要是界面程序编译运行后无法显示中文的问题,如果在creater 中无法输入中文,下载个IBus或者搜狗之类的中文输入法即可解决! 首先说乱码问题,这个很好解决: 如果是在linux下打开W ...
- 命令行下 pdb 调试 Python 程序
官方参考网站 The Python Debugger : https://docs.python.org/3/library/pdb.html gdb 调试命令的使用及总结:https://blog. ...
最新文章
- php通过浏览器下载json文件遇到的问题
- 经验分享 | 通过adbd配置漏洞在安卓设备上提升权限
- dubbo-admin构建问题总结
- 【APICloud系列|37】百度开放平台应用+,提升用户下载量操作步骤
- mac怎么查看gitlab的注册邮箱_163电子邮箱怎么注册申请?手机号注册电子邮箱的小技巧...
- BZOJ1016 [JSOI2008]最小生成树计数
- oracle as sydba,Oracle的操作系统认证(/ as sydba 登录方式)
- vmware 安装及使用虚拟机注意事项
- iOS:fishhook原理分析
- 全国大学生电子设计竞赛参赛分享
- Pycharm汉化后设置无法打开解决办法
- 思科路由器如何导出配置文件_如何备份cisco路由器配置文件
- itext 生成 PDF(一)
- SQL基础系列(六)——视图
- HTML5+CSS大作业——年会抽奖网页设计(1页)
- 怎样预防电脑辐射脱发
- spark报错 Unable to find encoder for type 你的样例类名
- QGraphicsItem释放内存——QGraphicsRectItem
- VS2019安装教程(C语言)
- Google Map中的瓦片
热门文章
- java无法下载jnlp_java-JNLP下载期间FileNotFoundException
- 基于Patachmatch的stereo matching笔记(三):《PatchmatchNet》
- android12.0(S) 通知栏不显示闹钟和静音图标 bug
- win10浏览器闪退_win10 ie浏览器闪退
- 领带打法最新10种(图解)
- 解决DoubanFM第三方客户端UI线程与工作线程交互问题
- 面试逻辑题(English)
- uniapp 跳转公众号获其他小程序
- 申万一级行业指数是什么?
- Dan Pitt卸任ONF执行董事