2015-06-02 2 views
0

Я пытаюсь создать автономное приложение Qt без необходимости использовать DLL. Я перекомпилировал Qt 5.4.1 статически. Когда я компилирую и запускаю приложение, он не требует никаких Qt-библиотек DLL, но для этого требуется libgcc_s_dw2-1.dll. Я также редактировал мой mkspecs перед настройкой и построения Qt, я редактировал эти значения:Компиляция автономного приложения Qt с использованием MinGW

QMAKE_CFLAGS   = -pipe -fno-keep-inline-dllexport -static -static-libgcc 
QMAKE_CXXFLAGS   = -pipe -fno-keep-inline-dllexport -static -static-libgcc -static-libstdc++ 

(добавлено -static -static-libstdC++ и -static-libgcc)

Я также добавил переменные окружения QMAKESPECS. Когда я что-то создаю с помощью Qt, я всегда вижу эти параметры в выходе, поэтому я уверен, что применяются mkspec. Когда я создаю программу без Qt с этими параметрами (-static -static-libgcc -static-libstdC++), при ее запуске ей не нужны библиотеки DLL.

Может кто-нибудь мне помочь? Я использую Qt 5.4.1 и MinGW-w64 4.9.2

+0

Эти параметры должны препятствовать 'libgcc_s_dw2-1.dll', поэтому, скорее всего, ваш основной исполняемый файл или какая-либо внешняя dll не подхватили этот флаг. Можете ли вы использовать инструмент, подобный ходу зависимости, чтобы узнать, какая DLL/исполняемый файл в точности зависит от этой DLL? –

+0

@RudolfsBundulis Я попытался просмотреть его в Dependency Walker сейчас, но кажется, что только сама программа зависит от libgcc, хотя я использовал упомянутые аргументы при компиляции. И это не зависит от какой-либо другой библиотеки, кроме Qt. Программа, которую я компилирую, очень проста, это всего лишь несколько строк кода. Я даже не использую никаких стандартных библиотек в программе (только Qt) – amethystAnt

+0

Я не уверен, что вы имели в виду под libgcc - точную DLL, которую вы упомянули, или что-то еще? Вы также должны посмотреть на Qt dll с зависимым ходоком и, возможно, с Qt-плагинами, если вы используете любой, чтобы найти, какой файл точно загружает указанную DLL. Когда вы сами компилируете приложение, вы передаете статические библиотеки в качестве флагов компоновщика или нет? –

ответ

0

Я решил проблему сейчас. Проблема заключалась в том, что, хотя я редактировал переменную QMAKE_CXXFLAGS, она все еще связывала стандартные библиотеки динамически при связывании самого приложения, потому что она не использует эту переменную на последнем этапе компиляции. Я только недавно отредактировал mkspecs и добавил параметр -static в переменную QMAKE_LIBS, и теперь он работает, у меня есть автономное приложение Qt.

Смежные вопросы