问题描述
Windows 11 VS Code C/C++ 开发环境搭建分别写了c
和cpp
两个示例代码,在运行过程中c
代码没有发现问题(可能简单,没有用到太多支持),但使用了stl
的cpp
代码并没有运行出来,如下图:
出问题的代码如下:
// hello.cpp
#include <iostream>
#include <vector>
#include <string>
int main() {
std::vector<std::string> msg {"Hello", "C++", "World", "from", "VS Code", "and", "MinGW-w64!"};
for (const std::string& word : msg) {
std::cout << word << " ";
}
std::cout << std::endl;
std::cout << "GCC version: " << __VERSION__ << std::endl; // 输出 GCC 版本
return 0;
}
问题分析
程序没有问题,但跑不出结果,这应该是引用的库没有正确指向导致,考虑这是一个MinGW
程序,且这个MinGW
我并没有在环境变量中“全局”设置,那么可以判断是“丢引用”了。
问题解决
1. 静态编译
在编译命令中加上-static
关键字,把编译后的可执行代码静态化,包含了相关运行库,问题得以解决(当然,这么干文件包会变大)。
2. 修改launch.json
文件
修改launch.json
文件的environment
参数,把相关环境变量加进去。
"environment": [
{
"name": "PATH",
"value": "D:/tools/mingw64/bin;${env:PATH}"
}
],
问题得到解决:
environment
参数解释
environment
数组: 这是定义环境变量的地方。- 对象结构: 每个对象包含
"name"
(环境变量名) 和"value"
(环境变量值)。 - 修改
PATH
:- 我们定义了一个名为
"PATH"
的环境变量。 - 它的值由三部分组成:
"C:/path/to/your/libs/bin"
: 你的第一个自定义目录路径 (使用正斜杠或双反斜杠)。"D:/another/dependency/bin"
: 你的第二个自定义目录路径。;
: Windows 上的路径分隔符。${env:PATH}
: VS Code 的变量替换,它会在启动时获取当前环境的PATH
值。
- 通过将你的目录放在
${env:PATH}
之前并用分号分隔,你实际上是将这些目录预置 (prepend) 到了运行时环境的PATH
中。这通常是推荐的做法,特别是对于加载 DLL,因为它确保你的库优先于系统或其他地方可能存在的同名库被找到。
- 我们定义了一个名为
- 路径分隔符:
- 在 Windows 上,使用分号 (
;
) 作为PATH
中不同目录的分隔符。 - 在 Linux/macOS 上,使用冒号 (
:
) 作为分隔符。如果你需要跨平台兼容,可以利用launch.json
中的平台特定配置部分("windows": {}
,"linux": {}
,"osx": {}
)。
- 在 Windows 上,使用分号 (