Russian Qt Forum
Ноябрь 22, 2024, 21:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как воспользоваться dll, которые находятся в ресурсах?  (Прочитано 9675 раз)
Павелъ
Гость
« : Апрель 18, 2017, 09:59 »

Доброго времени суток.

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

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Апрель 18, 2017, 10:28 »

Впервые слышу про загрузку dll из ресурсов...
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #2 : Апрель 18, 2017, 10:31 »

А это выглядит забавно Улыбающийся
1. Чтобы запустить exe нужны dll из ресурсов
2. Чтобы получить ресурсы из exe нужно запустить exe
3. Шаг 1.
Записан

Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Апрель 18, 2017, 11:29 »

А когда-то это было довольно популярно (на MacOS classic). Захотел напр свой listbox - ну сделал проект, откомпилил как "code resource" и залил в (нативные) ресурсы основного приложения. Но "для запуска" конечно не было

Сейчас на OSX заливают либы в bundle (очень удобно), но на др платформах такого нет. Поэтому увы
Записан
Павелъ
Гость
« Ответ #4 : Апрель 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

« Последнее редактирование: Апрель 18, 2017, 11:34 от Павелъ » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Апрель 18, 2017, 12:28 »

Это 3 маленьких файлика, возьми их с собой. Жалко что ли?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Павелъ
Гость
« Ответ #6 : Апрель 18, 2017, 12:37 »

Это 3 маленьких файлика, возьми их с собой. Жалко что ли?

Перфекционизм - дело такое. Пусть 3 маленьких, а всё равно покоя не дают.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Апрель 18, 2017, 12:58 »

Читал где-то как от них избавиться, но это нетривиально было. И все равно что-то оставалось. Могу ошибаться, много воды утекло с тех времен.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #8 : Апрель 18, 2017, 13:05 »

Оооо, я ща точно подскажу ! Улыбающийся
Короче. Берёшь, пишешь проект, который полностью статичен. Он включает в ресурсы dll целевой проги и саму прогу. При запуске распаквывает всё, запускает прогу и после завершения целевой проги (важно!) запаковывает в себя всё обратно. Шутка.
Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #9 : Апрель 18, 2017, 13:06 »

Мне удалось статически собрать компилятор QT.

а что такое "компилятор QT" ?
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #10 : Апрель 18, 2017, 13:07 »

По существу:
Линкеру надо передать флаги -static-libgcc -static-libstdc++ .
Записан
Павелъ
Гость
« Ответ #11 : Апрель 18, 2017, 14:10 »

По существу:
Линкеру надо передать флаги -static-libgcc -static-libstdc++ .

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

Или же не надо собирать компилятор и в настройках моего проекта указать?
Записан
Павелъ
Гость
« Ответ #12 : Апрель 18, 2017, 14:24 »

Если речь идёт о QLFLAGS из qmake.conf, то
-static-libgcc уже был в настройках
К этому флагу относится библиотека libgcc_s_dw2-1.dll ?
К флагу -static-libstdc++ относится библиотека libstdc++-6.dll ?

А для libwinpthread-1.dll тогда что?
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #13 : Апрель 18, 2017, 15:53 »

Вроде, всё так.
Можно это попробовать
http://stackoverflow.com/questions/13768515/how-to-do-static-linking-of-libwinpthread-1-dll-in-mingw
Записан
Павелъ
Гость
« Ответ #14 : Апрель 24, 2017, 20:06 »

Всё нормально, нужно было ещё в pro прописать
Код:
QMAKE_LFLAGS += -static -static-libgcc

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

Всем спасибо за помощь.
« Последнее редактирование: Апрель 24, 2017, 20:09 от Павелъ » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.054 секунд. Запросов: 23.