Название: Как воспользоваться 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 Название: 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 не запускается, ну и ладно. Всем спасибо за помощь. |