Я попытался настроить свою среду для разработки на C++ и следовать практической практике. Однако при запуске простой программы, которая печатает «Hello, world», я столкнулся со следующим выводом: «Ошибка сегментации». При отладке кода кажется, что проблема связана с файлом "libstdc++-6.dll". Однако я не уверен, как решить эту проблему, и я также не уверен, является ли это распространенной проблемой. Кто-нибудь может мне помочь?
Я использую Windows 11.
#include <iostream>
int main() {
std::cout << "Hello, world!" << std::endl;
return 0;
}
Быстрый
$ g++ hello.cpp -o hello
$ ./hello
Segmentation fault
В вашей программе нет ничего плохого. Ваша установка gcc может быть сломана/неправильно настроена. Я предлагаю удалить все его следы с вашего компьютера (убедитесь, что вокруг нет ни gcc.exe, ни libstdc++-6.dll) и установить новый, используя msys2
Привет! Я использовал MSYS2 для установки, а также выполнил некоторые команды с помощью «pacman», чтобы проверить, все ли правильно. Вывод подтверждает, что это так, но могут ли быть проблемы с моей установкой? @ДрюДорманн
gdb ./hello может дать подсказки
Протестируйте ту же программу внутри терминала mingw64, если вы этого не сделали. Я не уверен, как вы запускаете свой код, поскольку есть много способов сделать это. Если он не вылетает там, у вас, вероятно, dllhell
@dresserjm Я запустил его через терминал git bash. Однако, следуя вашему совету, я попытался запустить его в PowerShell, и это сработало. Можно ли исправить, чтобы я мог работать и в git bash?
Можно ли исправить, чтобы я мог работать и в git bash? Я ожидаю, что у вас установлена среда выполнения для более чем 1 версии MinGW, и что та, которая находится в PATH для git bash, неверна.
@drescherjm Я проверил путь команды g++ в PowerShell с помощью команды: (Get-Command g++).Source, а в Git Bash с помощью: which g++ и пути совпадают. Я также пытался проверить, есть ли какие-либо дубликаты в установке MinGW или другой версии, но я не смог их найти. Буду продолжать попытки внести коррективы.





У меня была точно такая же проблема, вызванная другим файлом dll на моем пути с именем libstdc++-6.dll. Для меня это было из-за языка программирования Julia. При использовании кода Visual Studio вы можете увидеть, какие файлы загружены, в моем случае:
Loaded 'C:\Users\xxxx\AppData\Local\Programs\Julia-1.8.2\bin\libstdc++-6.dll'. Symbols loaded.
По сути, обязательно проверьте свой путь;) Особенно для других языков программирования (или, возможно, для других более старых версий вашего компилятора C++).
Однако это не кажется плохим ответом, не могли бы вы сделать его более ясным? Должна ли Юлия загружаться или нет? Что делать, если есть (или нет)?
@TedLyngmo Ну, Julia - это совершенно другой язык программирования, поэтому компилятор, загружающий из него dll-файлы, - большая проблема. Когда я удалил Джулию из своего пути, мой компилятор начал использовать правильную dll. Мой код начал работать гладко :). В основном мои ответы состоят в том, чтобы просмотреть ваши переменные пути и удалить все те, которые кажутся потенциально проблематичными, пока вы не получите хит.
Хорошая информация. Пожалуйста, укажите это в ответе.
Это не распространенная проблема. Я подозреваю, что проблема кроется где-то на этапе «настроить мою среду для разработки на C++».