metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2009-05-09 01:32 am

фиг там спать с этими вашими линуксами

А вот скажите мне, как в линуксе ищутся shared object, то бишь библиотеки?
Не могу понять, как получается, что там где я собрал Qt креатором проект, он работает, а на другом дебиане - нет. Пишет, что не может загрузить libQtSql.so.4

ldd выдает отличающиется списки используемых либ:

libQtSql.so.4 => not found
libQtGui.so.4 => not found
libQtNetwork.so.4 => not found
libQtCore.so.4 => not found


libQtSql.so.4 => /home/user/qtsdk-2009.02/qt/lib/libQtSql.so.4 (0xb7ebe000)
libQtGui.so.4 => /home/user/qtsdk-2009.02/qt/lib/libQtGui.so.4 (0xb74a4000)
libQtNetwork.so.4 => /home/user/qtsdk-2009.02/qt/lib/libQtNetwork.so.4 (0xb7178000)
libQtCore.so.4 => /home/user/qtsdk-2009.02/qt/lib/libQtCore.so.4 (0xb6f25000)

По аналогии с вендой - скопировал нужные либы в папку к проге - фиг, все равно не видит :)


Установка qt либ из репозитория не помогла - ldd теперь их видит, но прога не работает - версия либ (4.2) раньше той на которой я прогу собирал (4.5)

В натуре придется LD_LIBRARY_PATH править, хотя везде написано что это антигуманно. Или еще как-нибудь заставлять лоадер либы рядом с приложением искать.

А вот если я захочу вместо Qt4.2 поставить Qt4.5, сломается что нибудь в системе или нет? И как это сделать, не поломав голову менеджеру пакетов?

[identity profile] metaclass.livejournal.com 2009-05-10 11:25 am (UTC)(link)
4.5 за собой тянет зависимость от GLIBC_2.4, если не принимать специальных мер. Т.е. с Qt самим я уже разобрался, а вот что делать с glibc пока неясно. Если менять LD_LIBRARY_PATH - валится с сегфолтом, нужно либо разбираться более подробно, либо убирать зависимости.

[identity profile] zamotivator.livejournal.com 2009-05-10 11:39 am (UTC)(link)
glibc менять это как бы очень хреново.
Либо статическая сборка (плохо для LGPL) либо смириться с более раней версией glibc, либо удовлетворяться тестируемым репозитарием (lили lenny), либо искать обходные пути типа LD_LIBRARY_PATH + run скрипт.

А вообще - мужик ты умный, и прочитай всё-таки как установка и распространение программ происходит в линуксе, что там с билдингом, прочим.

Для примера, кстати, глянь на скайп - у них две версии пакетов - статическая сборка (отсутствие зависимостей) или рантайм (с зависимостями).
Распространяют они дистр-специфичные пакетики.

Можешь у [livejournal.com profile] vitus_wagner на этот счёт посоветоваться - у него билд-система собирает программу под все мыслимые и немыслимые дистры + платформы без особых затрах - одной кнопкой.

[identity profile] metaclass.livejournal.com 2009-05-10 11:46 am (UTC)(link)
Я думаю, тут для начала достаточно будет собрать под этчем и запустить под ленни, и заодно попросить кого-нибудь из знакомых на других дистрибах проверить. Дебиан, по слухам, консервативен, значит будет более ранние версии держать, чем другие дистрибы.
А со сборкой пакетов придется разобраться, это как факт.

[identity profile] zamotivator.livejournal.com 2009-05-10 11:48 am (UTC)(link)
Попробу поищи бекпорты qt под etch.
В debian всегда есть бекпорты - порт новых версий библиотек под старые версии дистров.

Я тебе на ubuntu-janty x86_64 могу проверить =)

[identity profile] zamotivator.livejournal.com 2009-05-10 11:49 am (UTC)(link)
Ну, ubuntu она debian-like, и формат пакетов такой же.

[identity profile] metaclass.livejournal.com 2009-05-10 11:52 am (UTC)(link)
И там зависимости от новой глибц буквально в четырех функциях - проверка переполнения стека компилятором, отключается флагом компилятора, и еще три функции слежения за изменениями в файловой системе, нужно где-то там QT_NO_INOTIFY впихнуть при его пересборке.