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库相关推荐

  1. ubuntu下vscode调试开发踩过的坑

    最近刚过安装了中文版的ubuntu18.04.1,安装完之后想在ubuntu上安装vscode做c/c++的开发调试,踩了不少坑,在此记录一下,希望大家在这条路上不要再踩同样的坑. 1.安装vscod ...

  2. ubuntu下 vscode 配置c++ 环境和opencv

    先放链接 19年的,重点讲cv的配置与编译 要看准路径 这篇重点讲vscode的配置 建议多试几遍,加深理解 vscode配置这篇讲的比较好,和cv无关 要是报错动态库连接失败 官方教程

  3. Ubuntu18.04下VScode调试方法

    Ubuntu18.04下VScode调试教程 一.调试准备 二.需要创建哪些相关配置文件? 1.创建task.json文件 2.创建launch.json文件 3.创建c_cpp_properties ...

  4. ubuntu下VSCode的配置

    字体配置 在设置中搜索'font',在'Editor: Font family'中修改, 如下是Ubuntu下VSCode默认字体设置 'Droid Sans Mono', 'monospace', ...

  5. Windows11 WSL2 ubuntu中vscode调试代码

    Windows11 WSL2 ubuntu中vscode调试代码 Windows11 WSL2 ubuntu开发环境使用分享 第一章 Windows11 WSL2 安装ubuntu18.04并运行RO ...

  6. windows下VSCode调试时找不到文件的一种原因

    windows下VSCode调试时找不到文件的一种原因 使用gdb进行 debug调试时 报错:Unable to start debugging. Unexpected GDB output fro ...

  7. ubuntu下如何安装两个版本OpenCV?

    本文首发于微信公众号「3D视觉工坊」--ubuntu下如何安装两个版本OpenCV? 前言 由于在VSLAM技术研究过程中,经常会涉及OpenCV不同版本在ubuntu系统下的安装.因此小凡在此简单总 ...

  8. qt程序在Linux下字体乱了,解决linux/Ubuntu下Qt creater 界面程序在编译运行后无法显示中文或中文乱码问题!...

    本文解决的主要是界面程序编译运行后无法显示中文的问题,如果在creater 中无法输入中文,下载个IBus或者搜狗之类的中文输入法即可解决! 首先说乱码问题,这个很好解决: 如果是在linux下打开W ...

  9. 命令行下 pdb 调试 Python 程序

    官方参考网站 The Python Debugger : https://docs.python.org/3/library/pdb.html gdb 调试命令的使用及总结:https://blog. ...

最新文章

  1. php通过浏览器下载json文件遇到的问题
  2. 经验分享 | 通过adbd配置漏洞在安卓设备上提升权限
  3. dubbo-admin构建问题总结
  4. 【APICloud系列|37】百度开放平台应用+,提升用户下载量操作步骤
  5. mac怎么查看gitlab的注册邮箱_163电子邮箱怎么注册申请?手机号注册电子邮箱的小技巧...
  6. BZOJ1016 [JSOI2008]最小生成树计数
  7. oracle as sydba,Oracle的操作系统认证(/ as sydba 登录方式)
  8. vmware 安装及使用虚拟机注意事项
  9. iOS:fishhook原理分析
  10. 全国大学生电子设计竞赛参赛分享
  11. Pycharm汉化后设置无法打开解决办法
  12. 思科路由器如何导出配置文件_如何备份cisco路由器配置文件
  13. itext 生成 PDF(一)
  14. SQL基础系列(六)——视图
  15. HTML5+CSS大作业——年会抽奖网页设计(1页)
  16. 怎样预防电脑辐射脱发
  17. spark报错 Unable to find encoder for type 你的样例类名
  18. QGraphicsItem释放内存——QGraphicsRectItem
  19. VS2019安装教程(C语言)
  20. Google Map中的瓦片

热门文章

  1. java无法下载jnlp_java-JNLP下载期间FileNotFoundException
  2. 基于Patachmatch的stereo matching笔记(三):《PatchmatchNet》
  3. android12.0(S) 通知栏不显示闹钟和静音图标 bug
  4. win10浏览器闪退_win10 ie浏览器闪退
  5. 领带打法最新10种(图解)
  6. 解决DoubanFM第三方客户端UI线程与工作线程交互问题
  7. 面试逻辑题(English)
  8. uniapp 跳转公众号获其他小程序
  9. 申万一级行业指数是什么?
  10. Dan Pitt卸任ONF执行董事