[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结合Knife4j进行API分组授权管理配置详解

《SpringBoot结合Knife4j进行API分组授权管理配置详解》在现代的微服务架构中,API文档和授权管理是不可或缺的一部分,本文将介绍如何在SpringBoot应用中集成Knife4j,并进... 目录环境准备配置 Swagger配置 Swagger OpenAPI自定义 Swagger UI 底

解决hive启动时java.net.ConnectException:拒绝连接的问题

《解决hive启动时java.net.ConnectException:拒绝连接的问题》Hadoop集群连接被拒,需检查集群是否启动、关闭防火墙/SELinux、确认安全模式退出,若问题仍存,查看日志... 目录错误发生原因解决方式1.关闭防火墙2.关闭selinux3.启动集群4.检查集群是否正常启动5.

idea Maven Springboot多模块项目打包时90%的问题及解决方案

《ideaMavenSpringboot多模块项目打包时90%的问题及解决方案》:本文主要介绍ideaMavenSpringboot多模块项目打包时90%的问题及解决方案,具有很好的参考价值,... 目录1. 前言2. 问题3. 解决办法4. jar 包冲突总结1. 前言之所以写这篇文章是因为在使用Mav

Oracle迁移PostgreSQL隐式类型转换配置指南

《Oracle迁移PostgreSQL隐式类型转换配置指南》Oracle迁移PostgreSQL时因类型差异易引发错误,需通过显式/隐式类型转换、转换关系管理及冲突处理解决,并配合验证测试确保数据一致... 目录一、问题背景二、解决方案1. 显式类型转换2. 隐式转换配置三、维护操作1. 转换关系管理2.

Python38个游戏开发库整理汇总

《Python38个游戏开发库整理汇总》文章介绍了多种Python游戏开发库,涵盖2D/3D游戏开发、多人游戏框架及视觉小说引擎,适合不同需求的开发者入门,强调跨平台支持与易用性,并鼓励读者交流反馈以... 目录PyGameCocos2dPySoyPyOgrepygletPanda3DBlenderFife

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3

IDEA中配置Tomcat全过程

《IDEA中配置Tomcat全过程》文章介绍了在IDEA中配置Tomcat的六步流程,包括添加服务器、配置部署选项、设置应用服务器及启动,并提及Maven依赖可能因约定大于配置导致问题,需检查依赖版本... 目录第一步第二步第三步第四步第五步第六步总结第一步选择这个方框第二步选择+号,找到Tomca

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

Win10安装Maven与环境变量配置过程

《Win10安装Maven与环境变量配置过程》本文介绍Maven的安装与配置方法,涵盖下载、环境变量设置、本地仓库及镜像配置,指导如何在IDEA中正确配置Maven,适用于Java及其他语言项目的构建... 目录Maven 是什么?一、下载二、安装三、配置环境四、验证测试五、配置本地仓库六、配置国内镜像地址

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用