[VisualStudioCode]_[VSCODE]_[C/C++开发环境配置-问题解决和补充]

本文主要是介绍[VisualStudioCode]_[VSCODE]_[C/C++开发环境配置-问题解决和补充],希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

场景

  1. 在使用VSCode配置C++的开发环境时《VisualStudioCode_C/C++开发环境配置[1]》,编译时会发现找不到标准库的std::mutexstd::thread的声明,而这两个的头文件已经引入,什么情况?

  2. 无论如何MinGW都是Windows上验证开发C++特性比较新的工具,就是配置麻烦点。其实免费的话配置麻烦是可以接受的。想避免麻烦的话可以直接使用vsstudio的社区版。

说明

  1. MingGW的预编译版本官方推荐的是在niXman mingw-builds-binaries下载。这个版本我们发现有posixwin32版本,如果下载使用的是win32版本,那么如果要使用标准库thread,必须安装了gthread第三方库。而这个库一般是和gtk一起安装的,很少会用到,就会导致用不了<thread>。解决办法是使用posix线程的版本。如:
https://github.com/niXman/mingw-builds-binaries/releases/download/13.2.0-rt_v11-rev0/x86_64-13.2.0-release-posix-seh-msvcrt-rt_v11-rev0.7z
  1. 如果配置了MinGWbin目录在环境变量path,就不会出现链接问题。如果像我那样不想配置环境变量,需要模拟普通用户一样的环境,集成的终端就会出现以下错误。
Build finished with error(s).
E:\software\MinGW-w64\x86_64-13.2.0-release-posix-seh-msvcrt-rt_v11-rev0\bin\g++.exe -std=c++11 -IE:\software\MinGW-w64\x86_64-13.2.0-release-posix-seh-msvcrt-rt_v11-rev0\lib\gcc\x86_64-w64-mingw32\13.2.0\include\c++ -g -o E:\Project\Sample\08.cpp-test\test-synchronized\Debug-MinGW\test-synchronized.exe E:\Project\Sample\08.cpp-test\test-synchronized\test-synchronized\test-synchronized.cpp E:\Project\Sample\08.cpp-test\test-synchronized\test-synchronized\bas_lock.cpp

如果想看具体的信息,那么在外部终端运行,会弹出以下错误。在mingw安装目录下搜索这个cc1plus.exe命令,之后用Dependencies发现它缺少libwinpthread-1.dll文件,而这个文件是在mingw的安装目录bin下。因此编译链接需要有这个bin在搜索路径里,可以在tasks.json里设置当前编译目录是..\bin目录。 方法是在options->cwd里设置。

在这里插入图片描述

{"version": "2.0.0","tasks": [{..."options": {"cwd": "E:\\software\\MinGW-w64\\x86_64-13.2.0-release-posix-seh-msvcrt-rt_v11-rev0\\bin"},...}]
}
  1. Debug运行的时候如果报错无法调试,也是因为没有配置gdb的搜索路径,gdb也是需要依赖bin目录下的其他文件。所以需要在launch.json配置environment属性值。
ERROR: Unable to start debugging. Unexpected GDB output from command "-exec-run". During startup program exited with code 0xc000007b.
"environment": [{"name": "path","value": ";%path%;E:\\software\\MinGW-w64\\x86_64-13.2.0-release-posix-seh-msvcrt-rt_v11-rev0\\bin"}],
  1. tasks.json里配置的编译参数,如果要编译多个文件,可以使用gcc的参数。 如果要从任意文件都可以按F5编译运行,那么就需要使用${workspaceFolder}变量[3]
"args": ["-std=c++11","-IE:\\software\\MinGW-w64\\x86_64-13.2.0-release-posix-seh-msvcrt-rt_v11-rev0\\lib\\gcc\\x86_64-w64-mingw32\\13.2.0\\include\\c++","-g","-o","${workspaceFolder}\\Debug-MinGW\\test-synchronized.exe","${workspaceFolder}\\test-synchronized\\test-synchronized.cpp","${workspaceFolder}\\test-synchronized\\bas_lock.cpp"],

例子

  1. 这里是优化后的配置, 关键的3个文件,都需要放在.vscode目录下。 当然也可以自己配置执行Makefile的编译。

tasks.json 编译链接配置

{"version": "2.0.0","tasks": [{"type": "cppbuild","label": "test-synchronized","command": "E:\\software\\MinGW-w64\\x86_64-13.2.0-release-posix-seh-msvcrt-rt_v11-rev0\\bin\\g++.exe","args": ["-std=c++11","-IE:\\software\\MinGW-w64\\x86_64-13.2.0-release-posix-seh-msvcrt-rt_v11-rev0\\lib\\gcc\\x86_64-w64-mingw32\\13.2.0\\include\\c++","-g","-o","${workspaceFolder}\\Debug-MinGW\\test-synchronized.exe","${workspaceFolder}\\test-synchronized\\test-synchronized.cpp","${workspaceFolder}\\test-synchronized\\bas_lock.cpp"],"options": {"cwd": "E:\\software\\MinGW-w64\\x86_64-13.2.0-release-posix-seh-msvcrt-rt_v11-rev0\\bin"},"problemMatcher": ["$gcc"],"group": "build","detail": "compiler: g++.exe"}]
}

c_cpp_properties.json 智能感知声明跳转配置

{"configurations": [{"name": "MinGW-G++","includePath": ["${workspaceFolder}/**","E:\\software\\MinGW-w64\\x86_64-13.2.0-release-posix-seh-msvcrt-rt_v11-rev0\\include","E:\\software\\MinGW-w64\\x86_64-13.2.0-release-posix-seh-msvcrt-rt_v11-rev0\\x86_64-w64-mingw32\\include","E:\\software\\MinGW-w64\\x86_64-13.2.0-release-posix-seh-msvcrt-rt_v11-rev0\\lib\\gcc\\x86_64-w64-mingw32\\13.2.0\\include\\c++","E:\\software\\MinGW-w64\\x86_64-13.2.0-release-posix-seh-msvcrt-rt_v11-rev0\\lib\\gcc\\x86_64-w64-mingw32\\13.2.0\\include","E:/software/MinGW-w64/x86_64-13.2.0-release-posix-seh-msvcrt-rt_v11-rev0/lib/gcc/x86_64-w64-mingw32/13.2.0/include/c++/x86_64-w64-mingw32"],"defines": ["_DEBUG","UNICODE","_UNICODE"],"windowsSdkVersion": "10.0.22621.0","compilerPath": "E:\\software\\MinGW-w64\\x86_64-13.2.0-release-posix-seh-msvcrt-rt_v11-rev0\\bin\\g++.exe","cStandard": "c17","cppStandard": "c++11","intelliSenseMode": "windows-gcc-x64","compilerArgs": []}],"version": 4
}

launch.json 运行配置

{// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{  "name": "MinGW gdb launch","type": "cppdbg","request": "launch","program": "${workspaceFolder}\\Debug-MinGW\\test-synchronized.exe","args": [],"stopAtEntry": false,"cwd": "${workspaceFolder}","externalConsole": false,"environment": [{"name": "path","value": ";%path%;E:\\software\\MinGW-w64\\x86_64-13.2.0-release-posix-seh-msvcrt-rt_v11-rev0\\bin"}],"preLaunchTask": "test-synchronized","MIMode": "gdb","logging": {"moduleLoad": true,"trace": true},// "windows": {"options": {"env": {"path":"C:\\Windows;C:\\Windows\\System32;E:\\software\\cygwin64\\bin"}}},"miDebuggerPath": "E:\\software\\MinGW-w64\\x86_64-13.2.0-release-posix-seh-msvcrt-rt_v11-rev0\\bin\\gdb.exe","setupCommands": [{"description": "asdfas","text": "-enable-pretty-printing","ignoreFailures": true}] } ]
}

参考

  1. VisualStudioCode_C/C++开发环境配置

  2. niXman mingw-builds-binaries

  3. Visual Studio Code Variables Reference

这篇关于[VisualStudioCode]_[VSCODE]_[C/C++开发环境配置-问题解决和补充]的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/582729

相关文章

SpringBoot项目jar依赖问题报错解析

《SpringBoot项目jar依赖问题报错解析》本文主要介绍了SpringBoot项目中常见的依赖错误类型、报错内容及解决方法,依赖冲突包括类找不到、方法找不到、类型转换异常等,本文给大家介绍的非常... 目录常见依赖错误类型及报错内容1. 依赖冲突类错误(1) ClassNotFoundExceptio

python循环引用和解决过程

《python循环引用和解决过程》文章讨论了在Python中解决循环引用问题的几种方法,包括延迟导入、使用`importlib`、重构代码和类型提示的前向引用,这些方法可以帮助开发者避免导入循环导致的... 目录模拟循环引用解决python循环引用的方法有几种,以下是一些常见的解决android方案常见问题

MybatisPlus 多数据源切换@DS注解失效问题解决

《MybatisPlus多数据源切换@DS注解失效问题解决》在业务开发中使用到了多数据源,遇到了@DS注解失效问题,有两个场景使用到同一个@DS的查询方法,下面就来介绍一下该问题的解决,感兴趣的可以... 在业务开发中使用到了多数据源,遇到了@DS注解失效问题,有两个场景使用到同一个@DS的查询方法,一个正

Centos7 firewall和docker冲突问题及解决过程

《Centos7firewall和docker冲突问题及解决过程》本文描述了一个在CentOS7上使用firewalld和Docker容器的问题,当firewalld启动或重启时,会从iptable... 目录系统环境问题描述问题排查解决办法总结本文只是我对问题的记录,只能用作参考,不能China编程说明问题,请

利用c++判断水仙花数并输出示例代码

《利用c++判断水仙花数并输出示例代码》水仙花数是指一个三位数,其各位数字的立方和恰好等于该数本身,:本文主要介绍利用c++判断水仙花数并输出的相关资料,文中通过代码介绍的非常详细,需要的朋友可以... 以下是使用C++实现的相同逻辑代码:#include <IOStream>#include <vec

基于C++的UDP网络通信系统设计与实现详解

《基于C++的UDP网络通信系统设计与实现详解》在网络编程领域,UDP作为一种无连接的传输层协议,以其高效、低延迟的特性在实时性要求高的应用场景中占据重要地位,下面我们就来看看如何从零开始构建一个完整... 目录前言一、UDP服务器UdpServer.hpp1.1 基本框架设计1.2 初始化函数Init详解

jdk1.8的Jenkins安装配置实践

《jdk1.8的Jenkins安装配置实践》Jenkins是一款流行的开源持续集成工具,支持自动构建、测试和部署,通过Jenkins,开发团队可以实现代码提交后自动进行构建、测试,并将构建结果分发到测... 目录Jenkins介绍Jenkins环境搭建Jenkins安装配置Jenkins插件安装Git安装配

JAVA Calendar设置上个月时,日期不存在或错误提示问题及解决

《JAVACalendar设置上个月时,日期不存在或错误提示问题及解决》在使用Java的Calendar类设置上个月的日期时,如果遇到不存在的日期(如4月31日),默认会自动调整到下个月的相应日期(... 目录Java Calendar设置上个月时,日期不存在或错误提示java进行日期计算时如果出现不存在的

Mybatis对MySQL if 函数的不支持问题解读

《Mybatis对MySQLif函数的不支持问题解读》接手项目后,为了实现多租户功能,引入了Mybatis-plus,发现之前运行正常的SQL语句报错,原因是Mybatis不支持MySQL的if函... 目录MyBATis对mysql if 函数的不支持问题描述经过查询网上搜索资料找到原因解决方案总结Myb

C++ 右值引用(rvalue references)与移动语义(move semantics)深度解析

《C++右值引用(rvaluereferences)与移动语义(movesemantics)深度解析》文章主要介绍了C++右值引用和移动语义的设计动机、基本概念、实现方式以及在实际编程中的应用,... 目录一、右值引用(rvalue references)与移动语义(move semantics)设计动机1