LINUX.ORG.RU

Qt распространение программы. Библиотеки.

 , ,


1

1

При переносе релизной версии на другую машину нехватает библиотек Qt5.

ldd ~/documents/Proekt1
	linux-vdso.so.1 =>  (0x00007ffd40ff3000)
	libQt5Widgets.so.5 => not found
	libQt5Gui.so.5 => not found
	libQt5Sql.so.5 => not found
	libQt5Core.so.5 => not found
	libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fd98fb91000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fd98f97a000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd98f5ef000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fd98f36d000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fd98feab000)
Как в проекте прописать где должны лежать библиотеки, и от куда их взять с рабочей машины.

Что именно в ответах к прошлой теме оказалось непонятным?

CrossFire ★★★★★ ()

и от куда их взять

из репов дистрибутива. проставляешь скриптом при установке или (лучше) собери пакеты под deb/rpm

может быть что qt5 и нету в дистре, посему можешь возить либы с собой, положив прямо в директорию с бинарником, но при этом надо запускать так:
LD_LIBRARY_PATH=`pwd` ./yourProgram

dib2 ★★★★★ ()
Ответ на: комментарий от dib2

Как раз таки в репозиториях отсутствует qt, библиотеки нужно с собой брать.

LD_LIBRARY_PATH=`pwd` ./yourProgram

Является костылём, и не советую его использовать, по сути это запуск через .sh скрипт придется организовать, а это ведь не хорошо?

Читать до посинения.

Есть, Сэр!

vladcraft ()
Последнее исправление: vladcraft (всего исправлений: 1)
Ответ на: комментарий от vladcraft

Является костылём, и не советую его использовать, по сути это запуск через .sh скрипт придется организовать, а это ведь не хорошо?

все что не от пакетного менеджера - костыль по-сути.
со скриптом конечно, но не забываем про всякую муть, типа .desktop-файлов (тебе же «чтоб на рабочем столе ярлык был»? ;))

еще можешь в /usr/local/lib сложить.

dib2 ★★★★★ ()
Ответ на: комментарий от vladcraft

Прошу объяснить новичку, если не трудно.

Два варианта: либо делаем статическую сборку и все библиотеки вкомпиливаются в бинарник, либо таскаем их все с собой в папке, копируем скриптом. Вот тут статья про распространение статической сборки на всех платформах — при некотором желании скрипт можно модифицировать для динамической версии.

CrossFire ★★★★★ ()
Ответ на: комментарий от dib2

возникает другая ошибка, не грузит sql driver, хотя он есть и его видит. ./sqldrivers/ присутствует.

QSqlDatabase: QPSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QPSQL QPSQL7

vladcraft ()
Ответ на: комментарий от CrossFire

Слинковал всё статически, qt из зависимостей пропал, так же psql тоже захватил... Появились зависимости:

libpq.so.5 => not found
sudo apt-get install postgresql-client
А вот если запустить на дебиане появились зависимости, которые найти не могу:
libxcb-image.so.0 => not found
libxcb-icccm.so.4 => not found
libxcb-sync.so.1 => not found

vladcraft ()
Последнее исправление: vladcraft (всего исправлений: 1)
Ответ на: комментарий от vladcraft

Там вопрос в сборке Qt с правильными зависимостями по графическому серверу (xcb) в данном случае. Мы собирали вот так:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential perl python git
sudo apt-get install libgtk2.0-dev
sudo apt-get install «^libxcb.*» libx11-xcb-dev libglu1-mesa-dev libxrender-dev
sudo apt-get install libssl-dev
sudo apt-get install libcrypto++-dev
../qt-everywhere-opensource-src-5.3.1/configure -release -opensource -confirm-license -static -qt-zlib -qt-libpng -qt-libjpeg -qt-freetype -no-fontconfig -openssl-linked -qt-pcre -qt-xcb -qt-xkbcommon -no-cups -nomake examples -no-compile-examples -no-qml-debug -no-dbus -skip declarative -skip script -skip serialport -skip svg -skip webkit -skip xmlpatterns -skip webkit-examples -skip sensors -skip location -gtkstyle -glib -v

CrossFire ★★★★★ ()
Ответ на: комментарий от CrossFire

А теперь вообще другие ошибки при запуске на дебиане:

/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.15' not found (required by ../Proekt1)
/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (required by ../Proekt1)

=Но все зависимости удовлетворяет:

	linux-vdso.so.1 =>  (0x00007ffc5a9fb000)
	libgobject-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 (0x00007f41c181b000)
	libX11-xcb.so.1 => /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1 (0x00007f41c161a000)
	libXi.so.6 => /usr/lib/x86_64-linux-gnu/libXi.so.6 (0x00007f41c140a000)
	libSM.so.6 => /usr/lib/x86_64-linux-gnu/libSM.so.6 (0x00007f41c1203000)
	libICE.so.6 => /usr/lib/x86_64-linux-gnu/libICE.so.6 (0x00007f41c0fe8000)
	libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f41c0dc7000)
	libXrender.so.1 => /usr/lib/x86_64-linux-gnu/libXrender.so.1 (0x00007f41c0bbe000)
	libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f41c0883000)
	libpq.so.5 => /usr/lib/libpq.so.5 (0x00007f41c0654000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f41c0450000)
	libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f41c0158000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f41bff4f000)
	libGL.so.1 => /usr/lib/x86_64-linux-gnu/libGL.so.1 (0x00007f41bfcef000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f41bfad3000)
	libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f41bf7cb000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f41bf549000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f41bf333000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f41befa7000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f41c1a7e000)
	libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007f41beda5000)
	libffi.so.5 => /usr/lib/x86_64-linux-gnu/libffi.so.5 (0x00007f41beb98000)
	libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007f41be985000)
	libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007f41be780000)
	libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f41be57d000)
	libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f41be377000)
	libssl.so.1.0.0 => /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007f41be117000)
	libcrypto.so.1.0.0 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007f41bdd1f000)
	libkrb5.so.3 => /usr/lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007f41bda4a000)
	libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007f41bd846000)
	libgssapi_krb5.so.2 => /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007f41bd607000)
	libldap_r-2.4.so.2 => /usr/lib/x86_64-linux-gnu/libldap_r-2.4.so.2 (0x00007f41bd3b5000)
	libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f41bd178000)
	libglapi.so.0 => /usr/lib/x86_64-linux-gnu/libglapi.so.0 (0x00007f41bcf52000)
	libXdamage.so.1 => /usr/lib/x86_64-linux-gnu/libXdamage.so.1 (0x00007f41bcd50000)
	libXfixes.so.3 => /usr/lib/x86_64-linux-gnu/libXfixes.so.3 (0x00007f41bcb4a000)
	libxcb-glx.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0 (0x00007f41bc932000)
	libXxf86vm.so.1 => /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1 (0x00007f41bc72b000)
	libdrm.so.2 => /usr/lib/x86_64-linux-gnu/libdrm.so.2 (0x00007f41bc51f000)
	libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f41bc307000)
	libk5crypto.so.3 => /usr/lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007f41bc0de000)
	libkrb5support.so.0 => /usr/lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007f41bbed5000)
	libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007f41bbcd0000)
	libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f41bbaba000)
	liblber-2.4.so.2 => /usr/lib/x86_64-linux-gnu/liblber-2.4.so.2 (0x00007f41bb8aa000)
	libsasl2.so.2 => /usr/lib/x86_64-linux-gnu/libsasl2.so.2 (0x00007f41bb68f000)
	libgnutls.so.26 => /usr/lib/x86_64-linux-gnu/libgnutls.so.26 (0x00007f41bb3cf000)
	libgcrypt.so.11 => /lib/x86_64-linux-gnu/libgcrypt.so.11 (0x00007f41bb150000)
	libtasn1.so.3 => /usr/lib/x86_64-linux-gnu/libtasn1.so.3 (0x00007f41baf3e000)
	libp11-kit.so.0 => /usr/lib/x86_64-linux-gnu/libp11-kit.so.0 (0x00007f41bad2c000)
	libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007f41bab28000)
vladcraft ()
Последнее исправление: vladcraft (всего исправлений: 4)
Ответ на: комментарий от vladcraft

Потому что компилируешь на какой-нибудь новомодной убунточке 14.10.

Берёшь в зубы какой-нибудь CentOS 5, и компилируешь там всё что нужно в соответствии со стандартом LSB.

Подробнее тут.

EXL ★★★★★ ()
Ответ на: комментарий от vladcraft

Все правильно, нужно либо собирать Qt на более старом дистрибутиве со старым GLIBC, либо в Дебиане обновлять — нормальная ситуация.

CrossFire ★★★★★ ()
Ответ на: комментарий от EXL

Я debian base больше люблю. Компилирую на ubuntu 14.04, так как самая быстрая машина...

А не лучше ли, чтобы программа работала с новыми библиотеками?

vladcraft ()
Ответ на: комментарий от vladcraft

А не лучше ли, чтобы программа работала с новыми библиотеками?

Вот она у тебя и работает с новыми (glibc) библиотеками. Как видишь, половина дистров, в том числе и твой любимый debian base отвалились.

Компилирую на ubuntu 14.04, так как самая быстрая машина...

А нужно компилировать там, где максимально старый glibc. Так программа будет запускаться в любом дистрибутиве с 2007 года.

EXL ★★★★★ ()
Последнее исправление: EXL (всего исправлений: 2)
Ответ на: комментарий от EXL

А нужно компилировать там, где максимально старый glibc

Что посоветуете из debian base?

vladcraft ()
Ответ на: комментарий от vladcraft

Не знаю. Выберете какой-нибудь дистрибутив постарше, годов так 2009-2010. В нём и скомпилируйте.

EXL ★★★★★ ()
Ответ на: комментарий от vladcraft

Дебиан шестой. Более старое брать смысла нет - тебе в музее не отдадут.

RiseOfDeath ★★★★ ()
Последнее исправление: RiseOfDeath (всего исправлений: 1)
Ответ на: комментарий от vladcraft

Как в проекте прописать где должны лежать библиотеки

man rpath

лорчую этого оратора

значит согласен с мнением товарища

gavlig ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.