Russian Qt Forum

Компиляторы и платформы => Linux => Тема начата: chu от Август 16, 2012, 16:59



Название: symbol lookup error
Отправлено: chu от Август 16, 2012, 16:59
На рабочем компьютере с Ubuntu 10.04 и Qt 4.8.1 скомпилировал программу.
Перенес её на другой компьютер c точно такой же Ubuntu, но без Qt. Комп не имеет доступа к интернету, поэтому скачал с сайта http://packages.ubuntu.com (http://packages.ubuntu.com) необходимые .deb пакеты (qt библиотеки) и установил их на него.
Запускаю программу, выдаёт ошибку:
Код:
/path/to/bin: undefined symbol: _ZN6QImage4fillEN2Qt11GlobalColorE
Погуглил, оказалось что ошибка возникает из-за несоответствия библиотек (в репозитории ubuntu их версия 4.6).
Готовых .deb пакетов библиотек qt4.8.1 я не нашел, предполагаю их и нет, зато на сайте http://qt.nokia.com/downloads/ (http://qt.nokia.com/downloads/) есть исходники (qt-everywhere-opensource-src_4.8.2).
Нашел утилиту checkinstall, которая может из исходников создавать .deb пакеты:
Код:
cd /path/to/extracted/package
./configure
sudo make
sudo checkinstall
Получился файл qt-everywhere-opensource-src_4.8.2-1_i386.deb. Установил его, в синаптике вместо ожидаемого списка qt библиотек появилась 1 запись: qt-everywhere-opensource-src (абсолютно бесполезная).
Вопрос: где взять, как создать эти самые .deb пакеты с библиотеками qt4.8?



Название: Re: symbol lookup error
Отправлено: kambala от Август 16, 2012, 18:48
а со своей машины разве нельзя взять готовые библиотеки?


Название: Re: symbol lookup error
Отправлено: Alex Custov от Август 17, 2012, 00:42
synaptic показывает список установленных пакетов, а не библиотек. Понятно, что после установки qt-everywhere-opensource-src_4.8.2-1_i386.deb в synaptic будет отображаться именно он.

Но ближе к теме. Сама программа тоже оформлена в виде deb пакета? Если да, то самое быстрое и несколько кривое - прописать пакет qt-everywhere-opensource-src >= 4.8.1 в качестве альтернативы в control файл. Если не в виде deb пакета, то всё должно работать и так.


Название: Re: symbol lookup error
Отправлено: chu от Август 17, 2012, 01:19
Программа оформлена в виде исполняемого файла + конфиги, ресурсы и т.д.
Установил на оффлайн комп QtSDK (подумал вместе с ним в системе пропишутся необходимые либы, но нет).
Зато теперь если в консоли прописать export LD_LIBRARY_PATH=/path/to/qtsdk/lib, из неё можно запускать моё приложение.
Но хочется запускать его из файлового проводника (nautilus).
Опять же гуглил, нашел кучу разных способов прописать путь к каталогу с либами (в /etc/envarinment /etc/profile и еще разные другие)
, но, что удивительно, не один не сработал (видимо мне очень везет сегодня).
Так что вопрос остается открытым.


Название: Re: symbol lookup error
Отправлено: Alex Custov от Август 21, 2012, 12:15
Установи Qt библиотеки из любого пакета - хоть из стандартных libqt4-*, или твоего qt-everywhere-opensource-*, главное чтобы Qt либы в твоём пакете ложились в /usr/lib или /usr/local/lib, чтобы их нашла программа при запуске.


Название: Re: symbol lookup error
Отправлено: chu от Август 21, 2012, 18:25
Установи Qt библиотеки из любого пакета - хоть из стандартных libqt4-*, или твоего qt-everywhere-opensource-*, главное чтобы Qt либы в твоём пакете ложились в /usr/lib или /usr/local/lib, чтобы их нашла программа при запуске.
После установки стандартных(скачанных с  http://packages.ubuntu.com ) программа выдает ту самую ошибку.
Пакет  qt-everywhere-opensource-* содержит исходники, которые нужно собирать, в нем смысла, как я сейчас понял, нет так как он выдаст уже имеющиеся у меня на рабочем компе библиотеки.
Можно под рутом скопировать эти самые библиотеки с рабочего компа в /usr/lib и программа будет работать, но мне кажется это решение не честным, так как плохо что-то устанавливать в обход менеджера пакетов.


Название: Re: symbol lookup error
Отправлено: Alex Custov от Август 21, 2012, 20:53
библиотеки должны быть такой же версии или выше той версии Qt, с которой вы компилировали на своём компе. Если вы компилировали с 4.8 а на второй комп поставили 4.6, то скорее всего всё будет вылетать.

Или компилируйте на своём с 4.6, или на первом компе скомпилируйте пакет qt-everywhere-opensource-4.8.1 (это нужно не для рабочего компа!) и поставьте на второй комп.