По MinGW.exe требует несколько dll gcc независимо от кода?

при компиляции с MinGW я должен скопировать некоторые dll-файлы из каталога MinGW bin до запуска exe (даже при использовании " - static "и/или"- static-libstdc++".) Как мне это изменить? Есть ли специальная сборка MinGW, которую я должен использовать? В конечном счете, я хочу иметь возможность запускать программу только с exe в каталоге (и без набора переменных среды windows.) Эти файлы являются:

  • libstdc++-6.dll файлы
  • libgcc_s_seh-1.dll файлы
  • libwinpthread-1.dll файлы

и вот полный список шагов I fallow:

  1. Открыть Код::Блоки
  2. Выберите "Файл- > Создать - >Проект - > Консоль"
  3. заполните настройки проекта для проекта "Hello World"
  4. щелкните правой кнопкой мыши проект->параметры построения...- >Hello World (корневая цель) - >другие параметры
  5. введите "- static " (или "- static-libstdc++") под уже установленным "- fexceptions"
  6. CTRL-F9: построить проект (без выполнения)
  7. перейдите в Проводник Windows и запустите встроенный " Hello World.файл EXE.
  8. нажмите "ОК", когда появится сообщение " Ошибка: libstdc++-6.dll отсутствует на вашем компьютере."
  9. копировать " libstdc++-6.dll "из каталога /MinGW/bin/ в" Hello World.каталог ехе".
  10. Запустите " Hello World.EXE-файл"
  11. нажмите " OK" для сообщения " ошибка: libgcc_s_seh-1.dll отсутствует на вашем компьютере."
  12. копировать "libgcc_s_seh-1.dll " в " Привет, Мир.каталог ехе".
  13. повторить и в конечном итоге скопировать " libwinpthread-1.библиотека DLL" более чем хорошо.
  14. посмотреть

    Hello World!
    

Edit: Моя командная строка:

g++.exe -Wall -fexceptions -static -static-libgcc -static-libstdc++ -g -static-libgcc -static-libstdc++ -L. -c "C:Users______DesktopHello Worldmain.cpp" -o objDebugmain.o
g++.exe -o "binDebugHello World.exe" objDebugmain.o

со всеми dll-файлами, упомянутыми выше. И, на всякий случай, код есть:

// main.cpp
#include <iostream>

using namespace std;

int main()
{
    cout << "Hello world!" << endl;
    return 0;
}

3 ответов


ваши команды не правы !

перейдите в каталог, где ваш main.cpp файл есть, и попробуйте следующее.

g++.exe -Wall -c -g main.cpp -o obj\Debug\main.o
g++.exe -static -static-libgcc -static-libstdc++ -o "bin\Debug\Hello World.exe" obj\Debug\main.o

тогда вам больше не нужно будет копировать DLL (для вашей программы Hello World).

другие Примечания:

инструкция по установке MinGW рекомендует установить

c:\minGW;c:\MinGW\bin;

к переменной среды PATH.

нормально the

-static -static-libgcc -static-libstdc++

параметры компоновщика должны работать (попробуйте все 3 из них сразу). Но не для libwinpthread-1.dll.

кроме того, попробуйте clean до перекомпиляции.

нет команды "-static-something".

только стандартные библиотеки libgcc и libstdc++ можно установить в статическое соединение.

для других библиотек вы сначала переключаетесь на статическую связь с "- static", а затем перечисляете библиотеки для включения с отдельными команды, т. е. "-lpthread".


-static-libgcc может быть плохой идеей, если используются исключения. ссылка параметры документации утверждает, что

есть несколько ситуаций, в которых приложение должно использовать общий libgcc вместо статической версии. Наиболее распространенные из них когда приложение хочет бросить и поймать исключения через различные общие библиотеки. В этом случае каждая из библиотек а также само приложение должно использовать shared на libgcc.


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