vscode无法运行和调试使用了部分stl库的程序

一、起因

笔者最近突然发现自己的 vscode 不能运行带有部分 stl 库的程序,编译不会报错,运行也不会报错但是也没有结果(图1.1),调试的话会有下图中报错(图1.2)。拿一个以前的程序做测试,如果没有string或者vector一切正常。 图1.1带有string的程序运行
图1.2带有string的程序调试

二、分析

既然没有 string 或者 vector,程序可以正常运行,说明笔者的 vscode 配置和 C/C++ 环境是没有大问题的,也是多次检查了 launch.json 文件的。

于是笔者求助万能的度娘,发现遇到此种情况的人也有不少,但是其中的解决办法不适合笔者,例如这篇知乎文章:知乎文章

后来笔者求助本科时期的专业课老师,给出的建议是重装 vscode 或者在 cmd 中运行带有 stl 库的程序看看问题出在哪里,果断选择后者办法,终于发现了端倪,如图1.3:

图1.3 cmd 运行结果
无法定位程序输入点__gxx_personality_sj0于动态链接库。终于有个明显的报错信息了,拿到这个报错后搜索,发现是笔者的动态链接库出了问题(如同报错中的提示那样,这不是废话。。)。

问题在于 libstdc++ -6.dll 动态库在环境变量中存在多个,操作系统运行C/C++程序的时候不知道该用哪个库文件,用 everything 搜一下 libstdc++ -6.dll 就可以发现笔者的电脑中有很多 libstdc++ -6.dll。

图1.4 libstdc++-6.dll结果 git、python、mingw64等,在环境变量中也是有这些的。

三、解决

一个问题原因分析明白了,其实就解决一半了。对于笔者遇到的问题,一共有四种解决方式:

  1. 在 /Mingw/bin 目录下,找到 libstdc++ -6.dll 文件,将其放到C:\Windows\System32目录下(图1.5)。
  2. 使用 g++ -static xxx.cpp 编译并运行(图1.6)。
  3. 在 /Mingw/bin 目录下,找到 libstdc++ -6.dll 文件,将其放到要运行的代码目录下。
  4. 在 PATH 环境变量中除了 mingw 的 libstdc++ -6.dll ,其他的都删掉。

笔者最为推荐的是第一种方式,其他三种都是治标不治本的方式

图1.5
图1.6
使用第一种方式改动后笔者的 vscode 即可正常运行。图1.7
修改于:2021/12/12 20:24
忽有故人心上过,回首山河已是秋。

  • 35
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值