問題描述
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 上,使用分號 (