问题展示
在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日
一半油盐以谋生,一半诗意来谋爱。这是今天看到的一句话,加油啊杨咩咩。