|
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
|
||||||||||||||||||||||||||||||||||||
GNU/Linux Qt5.* - Линкуем статически23.01.2014, 19:10. Показов 145702. Ответов 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 | |
|
Знакомство с GNU/Linux
Помагите с Debian Gnu Linux ? Не работает kali linux на VirtualBox 6.0.16 r135674 (Qt5.6.2) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|
|
Создание формы заимствованного документа
Maks 03.08.2026
Задача:
Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также
табличная часть со следующими реквизитами:
- Расчетный счет покупателя. . .
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов.
Логика кажется понятной:
1. Находим ключевые слова.
2. Добавляем их на. . .
|
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302
Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
|