Программа не может запуститься, потому что отсутствует libgcc_s_dw2-1.dll
Я создал простую программу на C++ с Code::Blocks.
Если я запускаю его из Code::Blocks, он работает правильно; но если я запускаю его, дважды щелкнув по исполняемому файлу, появится окно с таким сообщением:
Программа не может запуститься, потому что libgcc_s_dw2-1.dll отсутствует на вашем компьютере.
Попробуйте переустановить программу, чтобы решить эту проблему.
Так в чем проблема? Что я должен сделать, чтобы это исправить?
17 ответов
Я считаю, что это проблема компилятора MinGW/gcc, а не установка Microsoft Visual Studio.
libgcc_s_dw2-1.dll
должен быть в каталоге bin компилятора. Вы можете добавить этот каталог в переменную окружения PATH для компоновки во время выполнения или избежать проблемы, добавив "-static-libgcc -static-libstdC++" к своим флагам компилятора.
Если вы планируете распространять исполняемый файл, последний, вероятно, имеет смысл. Если вы планируете запускать его только на своем компьютере, изменение переменной среды PATH является привлекательным вариантом (уменьшает размер исполняемого файла).
Обновлено:
Основываясь на отзывах Грега Трелевена (см. Комментарии ниже), я добавляю ссылки на:
[Скриншот кода:: Блоки "Параметры сборки проекта"]
Последнее обсуждение включает в себя -static-libgcc
а также -static-libstdc++
Варианты компоновщика.
В Eclipse вы найдете его в свойствах проекта> Сборка C/C++> Настройки> MinGW C++ Linker > Разное
Вы должны добавить его в "флаги компоновщика" вверху; нигде более. Тогда просто восстановите.
Я обнаружил, что связывание этих статически взрывает размер до 1400 КБ даже с оптимизацией. Это на 277 КБ больше по сравнению с простым копированием общих библиотек DLL. После UPXing он становится больше на 388 КБ. Очень потерять / проиграть здесь. Просто включите библиотеки DLL, так как конечный пользователь может решить удалить их или нет, если они установлены в другом месте.
Code::Blocks: добавить '-static' в настройках-> компилятор-> настройки компоновщика-> другие опции компоновщика.
Смотрите также Это решило мою проблему.
Кстати, это определенно compiler
флаг? Может быть linker
здесь более подходящий термин?
Найдите эту dll на вашем ПК и скопируйте ее в тот же каталог, в котором находится ваш исполняемый файл.
Нужно скопировать файл libgcc_s_dw2-1.dll в утилиту make.exe. (Если вы используете Msys, скопируйте его в \msys\bin) Убедитесь, что путь к make.exe задан в env. PATH (если make.exe находится в папке "bin", скорее всего, и у вас есть msys, это \msys\bin) Компиляция, запуск, отладка и т. Д. Счастливы.
Я смог преодолеть это с помощью "gcc" вместо "g++" для моего компилятора. Я знаю, что это не вариант для большинства людей, но подумал, что я бы упомянул об этом как обойти:)
Перейдите к дереву MinGW http sourceforge.net. В папке Home/MinGW/Base/gcc/Version4(или любой другой версии, которую вы используете)/gcc-4(версия) / вы найдете файл, например gcc-core-4.8.1-4-mingw32-dll.tar.lzma, Извлеките его и перейдите в папку bin, где вы найдете свой libgcc_s_dw2-1.dll и другие библиотеки DLL. Скопируйте и вставьте то, что вам нужно, в каталог bin.
Просто перейдите в "Настройки" >> "Компилятор и отладчик", затем перейдите на вкладку "Настройки компоновщика" и перейдите к элементу "Редактировать другие параметры компоновщика" и вставьте в него "-static-libgcc -static-libstdC++", здесь нет опции флага компилятора. в опциях флагов компилятора для Code::Blocks, так что это способ решения этой проблемы, я пришел сюда в поисках решения, и один парень, который писал о "-static-libgcc -static-libstdC++" дал правильную идею, и Я как-то разобрался с остальным, но это сработало, теперь файл можно кликнуть снаружи Code::Blocks, работает прямо с рабочего стола.
Разве вы не можете поместить его в system32 или что-то вроде того, что делаете с другими dll-файлами, чтобы каждая программа, которую вы пытаетесь запустить, не имела такой проблемы на вашем компьютере?
Мне просто нужен путь, куда его положить.
Довольно неприятно помещать его в каталог каждый раз, когда я запускаю только что созданную программу...
Изменить: я нашел решение:
Извлеките libgcc_s_dw2-1.dll в папку на вашем компьютере. Мы рекомендуем вам распаковать его в каталог программы, которая запрашивает libgcc_s_dw2-1.dll.
Если это не сработает, попробуйте извлечь libgcc_s_dw2-1.dll в системную директорию. По умолчанию это:
- C: \ Windows \ System (Windows 95/98 / Me)
- C: \ WINNT \ System32 (Windows NT / 2000)
- C: \ Windows \ System32 (Windows XP, Vista, 7)
Если вы используете 64-разрядную версию Windows, вам также следует поместить libgcc_s_dw2-1.dll в C:\Windows\SysWOW64\
Убедитесь, что перезаписали все существующие файлы (но сделайте резервную копию исходного файла). Перезагрузите компьютер.
Если проблема все еще возникает, попробуйте следующее:
- Откройте меню "Пуск" Windows и выберите "Выполнить...".
- Введите CMD и нажмите Enter (или, если вы используете Windows ME, введите COMMAND)).
- Введите regsvr32 libgcc_s_dw2-1.dll и нажмите Enter.
В CodeBlocks вы можете перейти в Настройки... Компилятор... и выбрать 1) два элемента в синем поле или 2) один элемент в зеленом поле.
Если вам интересно, где вы можете загрузить общую библиотеку (хотя это не будет работать на ваших клиентских устройствах, если вы не включите dll), вот ссылка: https://de.osdn.net/projects/mingw/downloads/72215/libgcc-9.2.0-1-mingw32-dll-1.tar.xz/
Включение -static-libgcc в строку компиляции решает проблему
g++ my.cpp -o my.exe -static-libgcc
По данным: @hardmath
Вы также можете создать псевдоним в своем профиле [ .profile ], например, если вы используете MSYS2
alias g++="g++ -static-libgcc"
Теперь ваша команда GCC тоже работает;-)
Не забудьте перезагрузить терминал
Добавление "-static" к другим параметрам компоновщика решает эту проблему. У меня просто была такая же проблема после того, как я проверил это на другой системе, но не самостоятельно, поэтому, даже если вы не заметили этого в вашей системе разработки, вы должны проверить, что у вас есть этот набор, если вы статически связываете.
Еще одно замечание: копирование библиотеки DLL в ту же папку, что и исполняемый файл, не является решением, поскольку она отрицает идею статической компоновки.
Другой вариант - использовать версию MinGW для TDM, которая решает эту проблему.
Шаг 1. Установите
-static-libgcc
а также
-static-libstdc++
flags, или установите
-static
флаг под
settings -> compiler -> global compiler settings | Compiler settings | Compiler Flags
Шаг 2 (не подчеркивается в других ответах): очистите сборку перед сборкой и запуском. Без очистки вы можете подумать, что перестраиваете проект, но в итоге у вас останется тот же .exe. Очистка, среди прочего, удалит файлы в папке и, так что при сборке новый набор файлов будет создан в
bin
а также
obj
папка.
Работая с msys2, я получил ту же ошибку, пытаясь выполнить релиз-версию моего проекта в среде отладки. Решение моей проблемы очевидно: используйте исполняемый файл с символами отладки.