Программа не может запуститься, потому что отсутствует libgcc_s_dw2-1.dll - PullRequest
154 голосов
/ 16 января 2011

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

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

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

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

Ответы [ 13 ]

186 голосов
/ 16 января 2011

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

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

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

Обновлен:

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

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

[опции ссылок GNU gcc]

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

36 голосов
/ 22 декабря 2011

В Eclipse вы найдете его в свойствах проекта> C / C ++ Build> Настройки> MinGW C ++ Linker> Разное

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

Eclipse properties screenshot

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

9 голосов
/ 20 января 2013

Код :: Блоки: добавить '-static' в настройках-> компилятор-> настройки компоновщика-> другие опции компоновщика.

5 голосов
/ 25 июня 2015

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

5 голосов
/ 08 октября 2011

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

5 голосов
/ 16 января 2011

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

4 голосов
/ 23 июня 2013

Просто зайдите в «Настройки» >> «Компилятор и отладчик», затем перейдите на вкладку «Настройки компоновщика» и перейдите к элементу управления «Другие параметры компоновщика» и вставьте в него «-static-libgcc -static-libstdc ++», нет параметр флага компилятора в параметрах флагов компилятора для Code :: Blocks, так что это способ решения этой проблемы, я пришел сюда в поисках решения, и тот, кто писал о "-static-libgcc -static-libstdc ++", дал право Идея, и я вроде как понял все остальное случайно, но это сработало, файл теперь доступен для клика снаружи Code :: Blocks, работает прямо с рабочего стола.

4 голосов
/ 31 января 2012

Разве вы не можете поместить его в 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.
4 голосов
/ 24 ноября 2011

См. также . Это решило мою проблему.

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

3 голосов
/ 25 февраля 2015

Перейти к дереву 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...