LINUX.ORG.RU

Помогите подружить Qt 4.8.4 и 4.8.6

 


0

1

Ставим Кубунту 14.10. Основанную на Qt 4.8.6. После доустанавливаем g++. Собираем Qt 4.8.4 из сорцев. Инсталлим. Собираем пустой проект виджета Qt. Компилится. При запуске получаем Cannot mix incompatible Qt libraries 408006 с 408004. ldd appname выдает ссылки на /usr/local/Trolltech/Qt-4.8.4/lib

На другом компе с той же системой и с такой же последовательностью все работает. При чем если на втором компе убрать из /usr/local/Trolltech/Qt-4.8.4/lib libQtGui, libQtCore то получаем такую же ошибку но цифры версий Qt наоборот Cannot mix incompatible Qt libraries 408004 с 408006. ldd appname ссылается на либы в /usr/lib/i386-gnu.../ В чем косяк на первом компе не пойму.

Предварительно косяк в том что вызываемые приложением libQtGui, libQtCore версии 4.8.4 при запуске обращаются к нечто на версии 4.8.6 (dbus?) и уже тут возникает конфликт.

На обоих компах: sudo aptitude search libdbus |grep -i libdbus- i libdbus-1-3 - simple interprocess messaging system (libr i libdbus-1-dev - simple interprocess messaging system (deve

Ответы про «снести 4.8.4 и поставить сорцы 4.8.6 и на них собрать», или еще какие то иные похожие про извращения >/dev/null Вопрос принципиальный решабелен или нет.

Попробовать проделать следующее:

Project -> Build & Run -> Run -> Run Environment

LD_LIBRARY_PATH заменить на /usr/local/Trolltech/Qt-4.8.4/lib

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

заменить на

В смысле значение по умолчанию изменить на требуемое.

anatoly
()

Вот беда то...

Погрепай по сорцам это сообщение, да посмотри в чём дело :)

Заодно и нам расскажешь.

pon4ik ★★★★★
()

Проблема из-за того, что загрузчик нашёл библиотеки с одинаковыми именами, но разными версиями, и загрузил программу с их смесью. К примеру, QtCore 4.8.4, а QtGui 4.8.6. Там внутри Qt проверка на это дело в рантайме. То-есть можно загружать с полным набором библиотек только 4.8.4 или только 4.8.6, микс работать не будет. Причина - зависимость частей библиотек от внутренних деталей реализации. Плагины при этом можно загружать любых версий.

Похоже, что после этой ручной инсталяции 4.8.4 поверх 4.8.6 какие-то библиотеки перетёрлись. Прийдётся восстанавливать обратно. И впредь ставить руками куда-то в локальную директорию, а не в корень системы.

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

Сборка идет вне IDE. Установка локальной переменной LD_LIBRARY_PATH не спасает.Делал.

pethead
() автор топика
Ответ на: комментарий от Dendy

Вся кутешка (т.е. вся - с всеми либами и инклудами) находится в /usr/local/Trolltech/Qt-4.8.4/ никакого корня системы. Если этот путь переименовать то ldd appname начинает ссылаться на либы 4.8.6 системные от КДЕ. Пробовл подменять (в качестве эксперимента!) libQtCore на от версии 4.8.6 в папке /usr/local/Trolltech/Qt-4.8.4/ тогда возникло segmentaion fault т.е. между QtGui & QtCore не было конфликта, а был конфликт между ними и чем то внешним, которое уже из набора 4.8.6. Пока проблему решил так: переименовал папку 4.8.4 и поставил и собрал 4.8.6 и свой проект с ней. Теперь разумеется работает все. Но будет время покопаюсь еще. :) Сегодня оттепель. :)

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

Вот лучше бы с -dbus библиотеку пересобрал. А то как потом деплоить на другие компьютеры свою программу будешь?

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