Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: Павелъ от Апрель 18, 2017, 09:59



Название: Как воспользоваться dll, которые находятся в ресурсах?
Отправлено: Павелъ от Апрель 18, 2017, 09:59
Доброго времени суток.

Мне удалось статически собрать компилятор QT. Программа уже не требует всякие QWidgets.dll и т.д. Но всё равно тройка dll нужна для программы.
Я засунул требуемые dll в ресурсы. Но как теперь сделать, чтобы программа при запуске брала dll из ресурсов?


Название: Re: Как воспользоваться dll, которые находятся в ресурсах?
Отправлено: Пантер от Апрель 18, 2017, 10:28
Впервые слышу про загрузку dll из ресурсов...


Название: Re: Как воспользоваться dll, которые находятся в ресурсах?
Отправлено: gil9red от Апрель 18, 2017, 10:31
А это выглядит забавно :)
1. Чтобы запустить exe нужны dll из ресурсов
2. Чтобы получить ресурсы из exe нужно запустить exe
3. Шаг 1.


Название: Re: Как воспользоваться dll, которые находятся в ресурсах?
Отправлено: Igors от Апрель 18, 2017, 11:29
А когда-то это было довольно популярно (на MacOS classic). Захотел напр свой listbox - ну сделал проект, откомпилил как "code resource" и залил в (нативные) ресурсы основного приложения. Но "для запуска" конечно не было

Сейчас на OSX заливают либы в bundle (очень удобно), но на др платформах такого нет. Поэтому увы


Название: Re: Как воспользоваться dll, которые находятся в ресурсах?
Отправлено: Павелъ от Апрель 18, 2017, 11:32
А это выглядит забавно :)
1. Чтобы запустить exe нужны dll из ресурсов
2. Чтобы получить ресурсы из exe нужно запустить exe
3. Шаг 1.


Логично.
Значит, по статье https://habrahabr.ru/sandbox/95171/ компилятор собрался не полностью статически.

На этапе сборки configure ругнулся на -qt-sql-sqlite, пришлось его убрать.

Походу, не совсем удачная статья для статической сборки. Может кто-то подкинет ссылку на статью на более правильный способ сборки компилятора?

Кстати, список требуемых dll:

Код:
libgcc_s_dw2-1.dll
libstdc++-6.dll
libwinpthread-1.dll



Название: Re: Как воспользоваться dll, которые находятся в ресурсах?
Отправлено: Пантер от Апрель 18, 2017, 12:28
Это 3 маленьких файлика, возьми их с собой. Жалко что ли?


Название: Re: Как воспользоваться dll, которые находятся в ресурсах?
Отправлено: Павелъ от Апрель 18, 2017, 12:37
Это 3 маленьких файлика, возьми их с собой. Жалко что ли?

Перфекционизм - дело такое. Пусть 3 маленьких, а всё равно покоя не дают.


Название: Re: Как воспользоваться dll, которые находятся в ресурсах?
Отправлено: Пантер от Апрель 18, 2017, 12:58
Читал где-то как от них избавиться, но это нетривиально было. И все равно что-то оставалось. Могу ошибаться, много воды утекло с тех времен.


Название: Re: Как воспользоваться dll, которые находятся в ресурсах?
Отправлено: __Heaven__ от Апрель 18, 2017, 13:05
Оооо, я ща точно подскажу ! :)
Короче. Берёшь, пишешь проект, который полностью статичен. Он включает в ресурсы dll целевой проги и саму прогу. При запуске распаквывает всё, запускает прогу и после завершения целевой проги (важно!) запаковывает в себя всё обратно. Шутка.


Название: Re: Как воспользоваться dll, которые находятся в ресурсах?
Отправлено: qate от Апрель 18, 2017, 13:06
Мне удалось статически собрать компилятор QT.

а что такое "компилятор QT" ?


Название: Re: Как воспользоваться dll, которые находятся в ресурсах?
Отправлено: __Heaven__ от Апрель 18, 2017, 13:07
По существу:
Линкеру надо передать флаги -static-libgcc -static-libstdc++ .


Название: Re: Как воспользоваться dll, которые находятся в ресурсах?
Отправлено: Павелъ от Апрель 18, 2017, 14:10
По существу:
Линкеру надо передать флаги -static-libgcc -static-libstdc++ .

это куда такие флаги передавать? В configure при сборке компилятора?
Или в make.conf прописать?

Или же не надо собирать компилятор и в настройках моего проекта указать?


Название: Re: Как воспользоваться dll, которые находятся в ресурсах?
Отправлено: Павелъ от Апрель 18, 2017, 14:24
Если речь идёт о QLFLAGS из qmake.conf, то
-static-libgcc уже был в настройках
К этому флагу относится библиотека libgcc_s_dw2-1.dll ?
К флагу -static-libstdc++ относится библиотека libstdc++-6.dll ?

А для libwinpthread-1.dll тогда что?


Название: Re: Как воспользоваться dll, которые находятся в ресурсах?
Отправлено: __Heaven__ от Апрель 18, 2017, 15:53
Вроде, всё так.
Можно это попробовать
http://stackoverflow.com/questions/13768515/how-to-do-static-linking-of-libwinpthread-1-dll-in-mingw


Название: Re: Как воспользоваться dll, которые находятся в ресурсах?
Отправлено: Павелъ от Апрель 24, 2017, 20:06
Всё нормально, нужно было ещё в pro прописать
Код:
QMAKE_LFLAGS += -static -static-libgcc

Теперь получился один exe. Только на XP не запускается, ну и ладно.

Всем спасибо за помощь.