|
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
|
||||||||||||||||||||||||||||||||||||
GNU/Linux Qt5.* - Линкуем статически23.01.2014, 19:10. Показов 143495. Ответов 62
Метки нет (Все метки)
В связи с отсутствием в данной теме мануала по статической линковке приложений Qt, решил исправить данный недостаток
![]() Оговорюсь сразу: приветствуется беспощадная критика, особенно, что касается скриптов) Итак: 1) Как обычно, нужно пересобрать фреймвор статически. Для этого скачиваем архив с исходными текстами отсюда: http://qt-project.org/downloads На данный момент имя тар-бола - qt-everywhere-opensource-src-5.2.0.tar.gz 2) Переходим в каталог с тар-болом. Разархивируем и распаковываем. Потом нужно сконфигурировать, собрать и установить тонну исходников. Делаем это так ( за дополнительными параметрами, если нужно, обращайтесь ./configure --help):
)Заходим в QtCreator, Tools > Options > Build & Run > Qt Versions Добавляем путь к новому qmake ( в нашем случае /usr/local/Qt5_static/bin/qmake ). Затем идем на вкладку Kits и добавляем новый набор инструментов, только укзываем ему qmake, только что добавленный на предыдущем шаге. Озаглавим этот набор Qt5_staticKit, например. Нажимаем Ok. 4) Ctrl+5, выбираем вверху проект, который мы хотим собрать статически, и щелкаем по новому Kit'y Qt5_staticKit. Выбираем Release конфигурацию. Тааак, здесь пока все. 5) Перелазим в .pro file. Добавляем туда
![]() Если посмотреть на вывод ldd, то можно увидеть, что приложение зависит еще от целой кучи не Qt-ных библиотек. Они могут быть бинарно-несовместимыми со своими предыдущими версиями (особенно, если написаны на С++) даже если они имеются на чужом компьютере. Например: Кликните здесь для просмотра всего текста
Пересобирать каждую из них, в случае, когда нет статической, довольно проблематично и долго и не всегда возможно ( кто хочет пусть попробует ), поэтому есть вариант поставлять их вместе со своим приложением. Большая вероятность того, что большинство этих библиотек будут на чужой машине, но выполнив еще немного действий, вы застрахуете и себя, и пользователя от лишней головной боли.Вот что делаем: 1) Нужно скопировать симлинк, который выводит ldd, и библиотеку на которую он указывает в каталог с нашим приложением. ( в нашем случае /path/to/app/lib ). Симлинк использует динамический загрузчик при загрузке библиотеки для приложения во время выполнения, ну а библиотека, на которую он указывает это собственно данные. Вот наваял такой скрипт (еще раз напомню, что правки и улучшения очень приветствуются c башем знаком 2 дня )
Выполняем:
Последний штрих: в .pro файл нужно добавить -rpath опцию линковщику, чтобы загрузчик потом знал, что поставляемые нами вместе с приложением библиотеки лежат в папке lib/ (в данном случае):
![]() Как из этого сделать программный пакет, смотрите документацию к своему дистрибутиву GNU/Linux. Ps. На MacOS процедура практически не должна отличаться, но у меня нет возможности проверить. Pss. Если ваше приложени базируется на плагинах, то они по своей природе не могут линковаться статически.. Смотрите документацию http://qt-project.org/doc/qt-4... t-x11.html и все вытекающие перекрестные ссылки по плагинам. ________________________________________ ________________________________________ ___________________________ Вроди бы ничего не забыл... Надеюсь, статейка кому-нибудь поможет разобраться. Спасибо и удачи
6
|
||||||||||||||||||||||||||||||||||||
| 23.01.2014, 19:10 | |
|
Ответы с готовыми решениями:
62
Timestamp->QdateTime (Qt5+Firebird+Linux) Qt5 перенос приложения из windows7 в linux (Raspbery)
|
|
1403 / 1260 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
|
|
| 14.01.2015, 16:52 | |
|
0
|
|
|
114 / 3 / 0
Регистрация: 16.11.2011
Сообщений: 162
|
|
| 14.01.2015, 16:54 | |
|
Спасибо, пошел качать образ. В пятницу продолжу мучения
0
|
|
|
114 / 3 / 0
Регистрация: 16.11.2011
Сообщений: 162
|
|
| 16.01.2015, 17:05 | |
|
Блин, на старой Ubuntu Qt Creator 1.3.1. он отказывается работать с Qt 5.3.2. Можно поставить туда новый Qt Creator?
0
|
|
|
1403 / 1260 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
|
|
| 16.01.2015, 17:14 | |
|
0
|
|
|
114 / 3 / 0
Регистрация: 16.11.2011
Сообщений: 162
|
|
| 16.01.2015, 17:24 | |
|
А GUI создаваемой программы? Или можно взять проект из нового Qt Creator и просто пересобрать его в старом линуксе через консоль?
0
|
|
|
1403 / 1260 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
|
||||||||||
| 16.01.2015, 17:30 | ||||||||||
0
|
||||||||||
|
114 / 3 / 0
Регистрация: 16.11.2011
Сообщений: 162
|
|
| 16.01.2015, 17:38 | |
|
Да с установкой уже разобрался, сначала протупил и пытался запустить x86 версию на Ubuntu x64, сейчас все уже ставится. С ним все таки удобнее делать программы
0
|
|
|
114 / 3 / 0
Регистрация: 16.11.2011
Сообщений: 162
|
||||||
| 19.01.2015, 11:32 | ||||||
|
Пытаюсь собрать Qt 4.6.2 под Ubuntu 10.04. На команду ./configure он после нескольких шагов сборки выдает:
0
|
||||||
|
1403 / 1260 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
|
|
| 19.01.2015, 13:33 | |
|
нужные xlib не установлены
0
|
|
|
114 / 3 / 0
Регистрация: 16.11.2011
Сообщений: 162
|
|
| 19.01.2015, 13:40 | |
|
Уже разобрался =) Наконец-то заставил работать прогу на этом калечном Astra Linux =)
0
|
|
|
0 / 0 / 0
Регистрация: 04.02.2015
Сообщений: 2
|
|
| 04.02.2015, 09:20 | |
|
Так все это делается через Maintenance tool. Я неправ?
0
|
|
|
zzzZZZ...
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
|
||
| 31.05.2015, 15:13 | ||
|
0
|
||
|
161 / 45 / 10
Регистрация: 25.08.2014
Сообщений: 345
|
||
| 14.04.2016, 11:45 | ||
|
Подниму тему.
Подскажите пожалуйста что надо установить или как правильно запустить. Делаю как в первом посте описанно. Только сборка поновее qt-everywhere-opensource-src-5.5.1.tar.gz Делаю из под рута Добавлял ключи -qt-xcb, и -no-xcb результат один и тот же
0
|
||
|
1403 / 1260 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
|
|||
| 14.04.2016, 11:53 | |||
|
Решение гуглится на раз.
0
|
|||
|
161 / 45 / 10
Регистрация: 25.08.2014
Сообщений: 345
|
||
| 14.04.2016, 13:57 | ||
|
Я указывал и linux-g++ и linux-g++-64 И полный путь писал Результат один и тот же. Если вы знаете решение, напиши пожалуйста. Добавлено через 1 час 5 минут *кстати, папка /usr/lib/Qt5_static создается, но она пустая, так и должно быть? или она просто создается но из-за ошибки не дособирает туда ничего?
0
|
||
|
1 / 1 / 0
Регистрация: 01.11.2010
Сообщений: 216
|
|
| 03.08.2016, 12:07 | |
|
А эта тема еще развивается? А то смотрю автор не отписывался в ней после публикации.
0
|
|
|
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
|
|
| 03.08.2016, 12:09 [ТС] | |
|
BlinCT, а что тут еще отписывать? Процесс сборки практически идентичный для последующих версий, что при наличии любопытства превращается в далеко не тяжелую задачу
0
|
|
|
1 / 1 / 0
Регистрация: 01.11.2010
Сообщений: 216
|
||||||
| 03.08.2016, 18:04 | ||||||
|
Сейчас опишу проблему, надеюсь вы как автор сможете посоветовать.
Скажите, вот я пытаюсь попробовать изменить пути именно поиска библиотек. Делаю такой командой в консоли chrpath -r lib/ ProjectTimer то есть чтобы программа ProjectTimer искала либы около себя в каталоге lib. Вот так выглядит дерево. http://picpaste.com/__________... pw0JNW.png А вот так выглядит вывод ldd
QMAKE_LFLAGS += -Wl,-rpath,"'lib/'" LD_LIBRARY_PATH = lib/ Но как бы это не помогает. По этому решил просто обратится за советом, скажите, или я что то не совсем так делаю из выше описанного или это в принципе не работает и стоит именно по вашей теме пересобрать все чтобы прогу можно было статически с либами линковать? Буду очень признателен в хотя бы небольшой помощи по данной теме. Хочу для Убунты собрать свой программу в SNAP пакет) Если что, я брал тему по изменению путей от сюда http://www.tripleboot.org/?p=138 Добавлено через 4 часа 31 минуту Выше отписался Sph что у него создался каталог /usr/Qt5_static но он пустой, и у меня так же. И когда подключил в проект новый инструментарий то он начал в этом каталоге конфиг искать, Само собою не нашол. Cannot read /usr/local/Qt5_static/mkspecs/linux-g++/qmake.conf: No such file or directory Could not read qmake configuration file /usr/local/Qt5_static/mkspecs/linux-g++/qmake.conf. Project ERROR: Unknown module(s) in QT: qml quick quickwidgets quickcontrols2 Project ERROR: Unknown module(s) in QT: qml quick quickwidgets quickcontrols2 Добавлено через 1 час 18 минут Ошибка с отсутствующим каталогом найдена. В этом все норм.
0
|
||||||
|
0 / 0 / 0
Регистрация: 21.09.2015
Сообщений: 4
|
|
| 08.06.2017, 16:24 | |
|
KOSHAK_, Подскажите пожалуйста, а как Вы решили проблему с fontconfig (у меня точь-в-точь такая же проблема и ошибки)?
0
|
|
|
0 / 0 / 0
Регистрация: 21.09.2015
Сообщений: 4
|
|
| 14.06.2017, 16:19 | |
|
RazrFalcon, gromo, могу я у Вас спросить, что за беда у меня происходит?
1) скачал qt-everywhere-opensource-src-5.9.0 2) разархивировал в свою папку 3) открыл консоль из папки архива 4) вбиваю следующие строки в консоль: max@max-PC ~/qt-everywhere-opensource-src-5.9.0 $ pr="/home/max/bin/qt590_linux64_static" max@max-PC ~/qt-everywhere-opensource-src-5.9.0 $ src=/home/max/qt-everywhere-opensource-src-5.9.0 max@max-PC ~/qt-everywhere-opensource-src-5.9.0 $ logf="conf_run_log590_64bit_static" max@max-PC ~/qt-everywhere-opensource-src-5.9.0 $ max@max-PC ~/qt-everywhere-opensource-src-5.9.0 $ $src/configure -v -static -confirm-license -opensource -system-zlib -system-pcre -system-xcb \ > -skip webengine -skip websockets -skip webchannel -no-icu -no-sql-mysql \ > -no-compile-examples -nomake examples -system-libpng -system-libjpeg -openssl-linked -no-qml-debug -release -force-debug-info -separate-debug-info \ > -system-freetype -fontconfig -no-strip -v \ > -skip qt3d -skip charts -skip connectivity -skip datavis3d -skip declarative -skip doc -skip gamepad -skip location \ > -skip quickcontrols -skip quickcontrols2 -skip script -skip sensors -skip serialbus -skip purchasing -skip wayland \ > -prefix $pr 2>&1 | tee $logf 5) qt поставился, всё хорошо. 6) открываю QtCreator, далее по пунктам с 3-5 данного описания статической линковки (воспользовался скриптом, который написал RazrFalcon, добавил в .pro файл необходимые строки с путём к директории с библиотеками, пересобрал бинарь и заархивировал полностью всю папку с библиотеками) 7) перенёс на другую машину с таким же Linux, но при запуске выдаёт ошибку: error while loading shared libraries: libxcb-xinerama.so.0: cannot open shared object file: No such file or directory. Файл этот в папке lib есть. В чём может быть проблема, подскажите пожалуйста?
0
|
|
| 14.06.2017, 16:19 | |
|
Помогаю со студенческими работами здесь
60
Знакомство с GNU/Linux
Помагите с Debian Gnu Linux ? Не работает kali linux на VirtualBox 6.0.16 r135674 (Qt5.6.2) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1
У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\
А в самом низу файла-профиля. . .
|