网站宣传与推广的方法,wordpress 搜索 高亮,建网站 南京,营销网站开发哪家强场景 在使用VSCode配置C的开发环境时《VisualStudioCode_C/C开发环境配置[1]》#xff0c;编译时会发现找不到标准库的std::mutex和std::thread的声明#xff0c;而这两个的头文件已经引入#xff0c;什么情况#xff1f; 无论如何MinGW都是Windows上验证开发C特性比较新的…场景 在使用VSCode配置C的开发环境时《VisualStudioCode_C/C开发环境配置[1]》编译时会发现找不到标准库的std::mutex和std::thread的声明而这两个的头文件已经引入什么情况 无论如何MinGW都是Windows上验证开发C特性比较新的工具就是配置麻烦点。其实免费的话配置麻烦是可以接受的。想避免麻烦的话可以直接使用vsstudio的社区版。
说明
MingGW的预编译版本官方推荐的是在niXman mingw-builds-binaries下载。这个版本我们发现有posix和win32版本如果下载使用的是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如果配置了MinGW的bin目录在环境变量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 -stdc11 -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},...}]
}在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}],在tasks.json里配置的编译参数如果要编译多个文件可以使用gcc的参数。 如果要从任意文件都可以按F5编译运行那么就需要使用${workspaceFolder}变量[3]。
args: [-stdc11,-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],例子
这里是优化后的配置, 关键的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: [-stdc11,-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: c11,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/?linkid830387version: 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}] } ]
}参考 VisualStudioCode_C/C开发环境配置 niXman mingw-builds-binaries Visual Studio Code Variables Reference