問題展示
在vscode中,隻要用了STL容器,就會出現這樣的提示
發現自己的 vscode 不能運作帶有部分 stl 庫的程式,編譯不會報錯,運作也不會報錯但是也沒有結果,調試的話會有下圖中報錯。拿一個以前的程式做測試,如果沒有string或者vector一切正常。
如果沒有使用STL容器就一切正常,應該不是vscode配置的問題,而且運作路徑也沒有中文。
無法定位程式輸入點__gxx_personality_sj0于動态連結庫。網上搜了半天,應該是這個錯誤資訊困擾了我。
問題在于 libstdc++ -6.dll 動态庫在環境變量中存在多個,作業系統運作C/C++程式的時候不知道該用哪個庫檔案,用 everything 搜一下 libstdc++ -6.dll 就可以發現筆者的電腦中有很多 libstdc++ -6.dll。(極大可能是因為anaconda那一個,在環境變量裡面搞鬼)
解決方法:
- 在 /Mingw/bin 目錄下,找到 libstdc++ -6.dll 檔案,将其放到C:\Windows\System32目錄下
- 使用 g++ -static xxx.cpp 編譯并運作。
- 在 /Mingw/bin 目錄下,找到 libstdc++ -6.dll 檔案,将其放到要運作的代碼目錄下。
- 在 PATH 環境變量中除了 mingw 的 libstdc++ -6.dll ,其他的都删掉。
最後我使用了第一種,然後事情就完美解決了
附上一段queue的簡單代碼作為調試
// CPP code to illustrate Queue in
// Standard Template Library (STL)
#include <iostream>
#include <queue>
using namespace std;
// Print the queue
void showq(queue<int> gq)
{
queue<int> g = gq;
while (!g.empty()) {
cout << '\t' << g.front();
g.pop();
}
cout << '\n';
}
// Driver Code
int main()
{
queue<int> gquiz;
gquiz.push(10);
gquiz.push(20);
gquiz.push(30);
cout << "The queue gquiz is : ";
showq(gquiz);
cout << "\ngquiz.size() : " << gquiz.size();
cout << "\ngquiz.front() : " << gquiz.front();
cout << "\ngquiz.back() : " << gquiz.back();
cout << "\ngquiz.pop() : ";
gquiz.pop();
showq(gquiz);
return 0;
}
噢~完美解決,感謝,撒花✿✿✿
記錄時間:2023年1月6日
一半油鹽以謀生,一半詩意來謀愛。這是今天看到的一句話,加油啊楊咩咩。