Программа не может запускаться, поскольку отсутствует libgcc_s_dw2-1.dll

Я создал простую программу на С++ с помощью Code:: Blocks.

Если я запустил его из Code:: Blocks, он работает правильно; но если я запустил его двойным щелчком по исполняемому файлу, появится окно с этим сообщением:

Программа не может запускаться, так как libgcc_s_dw2-1.dll отсутствует на вашем компьютере.
Попробуйте переустановить программу, чтобы устранить эту проблему.

Итак, в чем проблема? Что мне нужно сделать, чтобы исправить это?

Ответ 1

Я считаю, что это проблема компилятора MinGW/gcc, а не установка Microsoft Visual Studio.

libgcc_s_dw2-1.dll должен находиться в каталоге bin компилятора. Вы можете добавить этот каталог в свою переменную среды PATH для привязки во время выполнения, или вы можете избежать проблемы, добавив в свои флагов компилятора "-static-libgcc -static-libstdС++".

Если вы планируете распространять исполняемый файл, последний, вероятно, имеет наибольший смысл. Если вы планируете запускать его только на своей машине, изменение переменной среды PATH является привлекательной опцией (уменьшает размер исполняемого файла).

Обновлено:

Основываясь на отзывах от Грега Треливена (см. комментарии ниже), я добавляю ссылки на:

[Снимок экрана с кодом:: Блоки "Параметры сборки проекта" ]

[Параметры ссылки GNU gcc]

Последнее обсуждение включает в себя опции -static-libgcc и -static-libstdc++ компоновщика.

Ответ 2

В Eclipse вы найдете его в рамках свойств проектa > C/С++ Build > Settings > MinGW С++ Linker > Misc

Вы должны добавить его в "флаги компоновщика" вверху; нигде более. Затем просто перестройте.

Eclipse properties screenshot

Я обнаружил, что связывание этих статически взрывает размер до 1400 КБ даже при оптимизации. Это 277kb больше по сравнению с просто копированием через общие библиотеки DLL. Это 388kb больше, а также после UPXing все. Очень теряйте/проиграйте здесь. Просто включите библиотеки DLL, поскольку конечный пользователь может решить удалить их или нет, если они установлены в другом месте.

Ответ 3

Код:: Блоки: добавьте '-static' в settings- > compiler- > Настройки компоновщика- > Другие параметры компоновщика.

Ответ 4

См. . Он решил мою проблему.

Кстати, это определенно флаг compiler? Может быть, linker является более подходящим термином здесь?

Ответ 5

Найдите эту DLL на своем ПК и скопируйте ее в тот же каталог, в котором находится ваш исполняемый файл.

Ответ 6

Скопировать файл "libgcc_s_dw2-1.dll" в файл make.exe.  (Если вы используете Msys, скопируйте его в \msys\bin) Убедитесь, что путь к make.exe установлен в env. ДОРОЖКА  (если make.exe находится в папке "bin", скорее всего, и у вас есть msys, it\msys\bin) Компилировать, распаковывать, отлаживать и т.д. Счастливы.

Ответ 7

Я смог преодолеть это с помощью "gcc" вместо "g++" для моего компилятора. Я знаю, что это не вариант для большинства людей, но подумал, что я бы упомянул об этом как обойти :)

Ответ 8

Не можете ли вы поместить его в 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.

Ответ 9

Просто зайдите в "Настройки → Компилятор и отладчик", затем перейдите на вкладку "Настройки компоновщика" и перейдите к "Редактировать другие параметры компоновщика" и вставьте: "-static-libgcc -static-libstdС++", нет параметр компилятора в опциях компилятора Flags для Code:: Blocks, чтобы решить эту проблему, я пришел сюда, ища решение, и один парень, который опубликовал про "-static-libgcc -static-libstdС++", дал право идея, и я как бы разобрал остальное случайно, но это сработало, файл теперь можно щелкнуть снаружи Code:: Blocks, работает прямо с рабочего стола.

Ответ 10

Перейдите в дерево Minfor. В разделе 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.

Ответ 11

Добавьте путь к этой DLL в переменную среды PATH.

Ответ 12

Добавление "-static" к другим параметрам компоновщика решает эту проблему. У меня просто возникла та же проблема после того, как я протестировал ее в другой системе, но не самостоятельно, поэтому, даже если вы не заметили этого в своей системе разработки, вы должны проверить, что у вас есть этот набор, если вы статически связываете.

Еще одно замечание: копирование библиотеки DLL в ту же папку, что и исполняемый файл, не является решением, поскольку она отрицает идею статической компоновки.

Другой вариант - использовать версию MinGW для TDM, которая решает эту проблему.

Обновление редактирования: это может решить проблему не для всех. Еще одна причина, которую я недавно обнаружил, заключается в том, что вы используете библиотеку, скомпилированную кем-то другим, в моем случае это был SFML, который был неправильно скомпилирован и поэтому требовал библиотеки DLL, которой не было, поскольку она была скомпилирована с другой версией MinGW использовать. Я использую сборку дварфа, она использовала другую, поэтому у меня нигде не было DLL и, конечно, я не хотел ее, так как это была статическая сборка. Решением может быть нахождение другой сборки библиотеки или сборка самостоятельно.

Ответ 13

Работая с msys2, я получил ту же ошибку, пытаясь выполнить релиз-версию моего проекта в среде отладки. Решение моей проблемы очевидно: используйте исполняемый файл с символами отладки.

Ответ 14

Включение -static-libgcc в строку компиляции решает проблему

g++ my.cpp -o my.exe -static-libgcc

Согласно: @hardmath

Вы также можете создать псевдоним в своем профиле [.profile], если вы используете MSYS2, например

alias g++="g++ -static-libgcc"

Теперь ваша команда GCC тоже работает ;-)

Запомните, чтобы перезапустить ваш терминал