在命令行上运行但未在 Visual Studio Code 上运行时,C++ HelloWorld 程序上出现分段错误 (Windows 10)

Segmentation fault on C++ HelloWorld program when ran on command line but not Visual Studio Code (Windows 10)

提问人:RLimon 提问时间:11/12/2023 最后编辑:RLimon 更新时间:11/12/2023 访问量:115

问:

我可以通过 VisualStudioCode 运行 C++ 程序,但是如果我尝试从命令行运行它,我会得到一个分段错误。问题似乎来自C:\Program Files\Git\mingw64\bin\libstdc++-6.dll

更新:从 C:\Program Files\Git\mingw64\bin\ 中删除 libstdc++-6.dll 允许程序在命令行上运行。不完全确定为什么。

我已经查看了我的 ENV 变量是否有任何问题,但一无所获。https://code.visualstudio.com/docs/cpp/config-mingw,我按照这篇文章安装了编译器。它适用于编译我想要的 c 程序。我使用了默认设置,所以我的路径变量是 C:\msys64\ucrt64\bin。我尝试像其他帖子建议的那样将变量向上移动,但没有任何变化。我将此变量作为用户和系统路径变量的一部分。我也尝试将其从 C:\msys64\ucrt64\bin 更改为 C:\msys64\mingw64\bin。

当我使用 gdb 单步执行程序时,结果是:

正在读取 helloWorld 中的符号... (gdb) 运行 启动程序:C:\Users\user\Desktop\Code\C++\helloWorld.exe [新线程 21684.0x52f8] [新线程 21684.0x4c6c] [新线程 21684.0x3b10]

线程 1 接收到信号 SIGSEGV,分段故障。 0x00007ff8c5c363a6 ??() 来自 C:\Program Files\Git\mingw64\bin\libstdc++-6.dll

我用来编译程序的命令:

g++ -g -o helloWorld helloWorld.cpp

$ ./helloWorld

分段故障

奇怪的是,当我尝试使用 VSC 运行代码时,它实际上有效。我想知道为什么它会使用 VSC 而不是命令行工作,以及如何让它在命令行上工作。

几年前,我安装了cygwin64。我不知道这是否相关或可能以某种方式干扰

我选择的 VSC 选项用于运行代码

这是我的helloWorld代码,仅供参考:

#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
    vector<string> msg {"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"};

    for (const string& word : msg)
    {
        cout << word << " ";
    }
    cout << endl;
    return 0;
}
C 可视化工作室代码 G++ MSYS2

评论

0赞 jkb 11/12/2023
这似乎对我有用。尝试删除可执行文件,然后重新生成并运行。./helloWorld
0赞 jkb 11/12/2023
实际上,它看起来像正在执行,因此您可能没有运行相同的程序。gdbhelloWorld.exe
0赞 user4581301 11/12/2023
注: “命令”窗口在启动时会加载路径,因此更改系统路径至少需要在更新路径后重新启动用于运行程序的命令窗口。
2赞 HolyBlackCat 11/12/2023
“删除 libstdc++-6.dll”这样做可能会破坏 Git。正确的解决方案是配置生成系统以将此 dll 从中复制到生成目录。C:\msys64\ucrt64\bin
1赞 HolyBlackCat 11/13/2023
“似乎工作正常”这是幸运的。但是你对 Git 所做的与你自己的程序之前所受制于的事情相同:没有正确的 .dll 可供它访问,而是使用恰好在 PATH 中具有相同名称的 .dll,这有时有效,有时无效。“我甚至不知道我的构建系统是什么。”你没有使用一个。:)要么开始使用一个(Make或CMake或其他东西),要么手动复制一次dll,或者编写一个脚本来运行编译器和dll。cp

答: 暂无答案