Russian Qt Forum

Qt => Общие вопросы => Тема начата: SASA от Июнь 22, 2009, 14:15



Название: Динамические библиотеки.
Отправлено: SASA от Июнь 22, 2009, 14:15
Здравствуйте.
Как заставить кутэ приложение под linux искать библиотеки в каталоге с исполняемым файлом.


Название: Re: Динамические библиотеки.
Отправлено: kuzulis от Июнь 22, 2009, 14:24
А нет смысла в этом.. т.к.  идея и архитектура в Linux иная нежели в Windows...

Я бы напрример собирал бы пакет *.rpm *.pkg *.deb *.tgz и т.п. в зависимости от дистрибутива.. и всё!

т.е в "инсталляторе" пакета прописывалось бы куда копировать *.so  (т.е. в /usr/lib, /usr/local/lib, /lib в зависимости от дистра)


Название: Re: Динамические библиотеки.
Отправлено: kuzulis от Июнь 22, 2009, 14:27
и это нужно заставлять НЕ ПРИЛОЖЕНИЕ ИСКАТЬ - а заставлять сам ЛИНУКС искать там где нужно их...

Поищи инфу в гугле по ключевым словам ldd и вообще про идею ! т.е как загрузчик исполняемых файло в Линуксе ищет динамические библиотеки и т.п.!



Название: Re: Динамические библиотеки.
Отправлено: kuzulis от Июнь 22, 2009, 14:39
вот: http://doc.novsu.ac.ru/linux/book/node19.html
Цитировать
3.2.10 ld.so.conf

Файл /etc/ld.so.conf представляет собой конфигурационные данные для сборщика-загрузчика. Он содержит список каталогов, в которых следует искать библиотеки. Подробнее смотрите man ld.so и man ldconfig. На основании содержания файла /etc/ld.so.conf строится другой файл /etc/ld.so.cache, который содержит упорядоченный список библиотек, найденных в каталогах, имена которых перечислены в файле /etc/ld.so.conf. Файл /etc/ld.so.cache можно посмотерть посреством команды ldconfig -p.

вот http://www.dwheeler.com/secure-programs/Secure-Programs-HOWTO/dlls.html

вот http://linuxopen.ru/2008/08/01/staticheskie-i-dinamicheskie-biblioteki.html

вот http://www.ibm.com/developerworks/ru/library/l-dynamic-libraries/index.html

и т.п. думаю дальше сам :)


Название: Re: Динамические библиотеки.
Отправлено: SASA от Июнь 22, 2009, 16:31
За первые три ссылки из гугла спасибо ;D

И всё же. Ниужели все программы под линух хранят свои дллки в общих каталогах?
Например, у QtCreator в бинах лежат его дллки, а записи в ld.so.conf нету. Может это плагины, но они бы лежали в папочке с названием типа plugins.


Название: Re: Динамические библиотеки.
Отправлено: lit-uriy от Июнь 22, 2009, 17:15
>>Как заставить кутэ приложение под linux искать библиотеки в каталоге с исполняемым файлом.
см. qt.conf (http://doc.qtsoftware.com/4.5-snapshot/qt-conf.html)


Название: Re: Динамические библиотеки.
Отправлено: kuzulis от Июнь 22, 2009, 20:07
еще выход - это создать в одной из директории где лежат "системные" либы линукса симлинк на либы - которые тебе нужно использовать..
например:
1. у тебя бинарики и либы твоего приложения лежат в
/home/vasyapupkin/myapp/bin/myappbinary
/home/vasyapupkin/myapp/lib/myapplibrary.so

2. делаеш например в /usr/lib симлинк на /home/vasyapupkin/myapp/lib/myapplibrary.so
т.е.
Цитировать
ln - s /home/vasyapupkin/myapp/lib/myapplibrary.so /usr/lib
в директории /usr/lib создастся ссылка на твою либу :)

Эт выход - но только для тестирования проги.. а лучше все-таки делать инсталляционные пакеты


Название: Re: Динамические библиотеки.
Отправлено: Alex Custov от Июнь 23, 2009, 00:12
1) создай скрипт, который будет называться так же как и твоя прога, а прогу переименуй в proga.bin
2) в скрипте делай

LD_LIBABRY_PATH=/путь/к/каталогу/с/твоими/библиотеками /путь/к/каталогу/с/прогой/proga.bin

или аналогично с LD_PRELOAD, man ldd короче. Через LD_PRELOAD, например, работает Firefox.

P.S. очевидно речь идёт о машине где нет рутовских прав? :)


Название: Re: Динамические библиотеки.
Отправлено: break от Июнь 23, 2009, 01:45
Человек задался правильным вопросом. На этапе разработки программы (особенно если это проект где несколько исполняемых файлов использующих одни библиотеки) не хочется кидать ее so в системные папки, т.к. это глупо. Тем более не смысла делать пакеты. И хочется держать все либы в одной подпапке проекта чтобы иметь к ним доступ - т.е. прибить вручную, если похерился make файл и т.п. Аналоггично неудобно использовать всякие копирующие скрипты. Можно добавить в pro файл  специальные флаги которые передадутся линкеру и на этапе запуска приложения либы будут браться из указанного каталога

вариант:
Цитировать
LD_LIBABRY_PATH=/путь/к/каталогу/с/твоими/библиотеками /путь/к/каталогу/с/прогой/proga.bin
-- скорее всего не будет работать с отладчиком, или необходимо будет в отладчике дополнительные параметры указывать... Но точно не уверен.

Код:
QMAKE_LFLAGS += -Wl,-rpath,lib

В приведенной строке задан каталог lib в качестве местоположения библиотек - т.е. в текущем каталоге откуда был произведен запуск программы должны быть подпапка lib со всеми библиотеками. Также отладчик работает без проблем.


Название: Re: Динамические библиотеки.
Отправлено: SASA от Июнь 23, 2009, 16:49
см. qt.conf (http://doc.qtsoftware.com/4.5-snapshot/qt-conf.html)

Насколько я понял эта штука нужна, чтобы указать где лежит библиотеки, плагины, переводы самого куте. А заставить прогу найти мою библиотеку с помощью qt.conf (http://doc.qtsoftware.com/4.5-snapshot/qt-conf.html) у меня не вышло.



Код:
QMAKE_LFLAGS += -Wl,-rpath,lib

В приведенной строке задан каталог lib в качестве местоположения библиотек - т.е. в текущем каталоге откуда был произведен запуск программы должны быть подпапка lib со всеми библиотеками. Также отладчик работает без проблем.

Такой ответ я и искал. Спасибо.

Но уже сделал как описал AX. И наверное останавлюсь на этом решении, потому что так сделан qtcreator. Я думаю троли знают про QMAKE_LFLAGS, но почему-то его не используют.

Про каталоги, отладку и т.п.
Я думаю,что это нужно не только на этапе разработки программы.
Я ставил qtcreator. Виндус подобный инсталятор, таже политика расположения программы в фаловой структуре, иконки, менюхи и даже деинстолятор. Не понимаю зачем пихать свои библиотеки в системные каталоги. Я разрабатывю всё под виндой, а под линухом только отлаживаюсь. Причём это мой такой первый проект (чисто комерческий продукт).  Естественно, я не понимаю философии линукса, а  пытаюсь внедрять видовс решения. И не вижу в них нечего плохого. Может я ошибаюсь, но инсталяция программы аля виндовс очень хорошее решение, так сказать, близкое к простому пользователю.
Жду коментариев.


Название: Re: Динамические библиотеки.
Отправлено: ритт от Июнь 23, 2009, 17:10
> Жду коментариев.
только без холиваров, пожалуйста


Название: Re: Динамические библиотеки.
Отправлено: Alex Custov от Июнь 23, 2009, 17:39
Я думаю троли знают про QMAKE_LFLAGS, но почему-то его не используют.

-rpath не рекомендуется к использованию, например в Дебиане: http://wiki.debian.org/RpathIssue

Может я ошибаюсь, но инсталяция программы аля виндовс очень хорошее решение, так сказать, близкое к простому пользователю.

QtCreator так устанавливается, потому что его ещё нет в дистрибутивах. Скорее всего, что после вставки в дистрибутив, особенно Дебиан, его структура будет сильно другой. В Linux всё принято станвить в файловую систему, и управлять этим через пакетный менеджер. Приватные екзешники кладут в libexec, свои плагины и библиотеки в /usr/lib/myproga/, иконки в /usr/share/icons и т.д.

Ну а что может быть проще aptitude install? :)


Название: Re: Динамические библиотеки.
Отправлено: kuzulis от Июнь 23, 2009, 18:09
Цитировать
Ну а что может быть проще aptitude install?

pacman -Suy

:)

Цитировать
Я ставил qtcreator. Виндус подобный инсталятор, таже политика расположения программы в фаловой структуре, иконки, менюхи и даже деинстолятор.

Ну еще таким же образом как и QtCreator "работает" и Firefox скачанный в бинарном виде с их сайта.. т.е. запуск идет через скрипт (эт то что я знаю)

Цитировать
Не понимаю зачем пихать свои библиотеки в системные каталоги.
Ну во первых в системные каталоги пихать ничо не надо.. для этого существуют другие директории поиска либ и т.п
Во вторых я не понимаю зачем тогда вообще создавать динамические библиотеки, если их не использует больше ни одно приложение кроме вашего .. может проще все делать монолитно? :)

Цитировать
Я разрабатывю всё под виндой, а под линухом только отлаживаюсь. Причём это мой такой первый проект (чисто комерческий продукт). 
А зачем делать под виндой а отлаживаться под линухом ? о_О

Цитировать
Естественно, я не понимаю философии линукса, а  пытаюсь внедрять видовс решения. И не вижу в них нечего плохого.

 И нечо в чужой монастырь со своим уставом идти :)

Цитировать
Может я ошибаюсь, но инсталяция программы аля виндовс очень хорошее решение, так сказать, близкое к простому пользователю.
тут вопрос спорный







Название: Re: Динамические библиотеки.
Отправлено: Rcus от Июнь 23, 2009, 19:35
Во вторых я не понимаю зачем тогда вообще создавать динамические библиотеки, если их не использует больше ни одно приложение кроме вашего .. может проще все делать монолитно? :)
Вот насчет этого я могу сказать пару слов. У многих KDE приложений есть не только полновесный GUI, но и минималистичный плазмоид. У KMLDonkey например вся функциональность связи с ядром MLDonkey (реализация сетевого протокола, хранение низкоуровневых структур данных, передача команд ядру) вынесена в библиотеку и, хотя библиотека не очень большая (500кб в релизе), но все же линковать ее статически как-то некошерно.


Название: Re: Динамические библиотеки.
Отправлено: SASA от Июнь 24, 2009, 19:42
Цитировать
Ну во первых в системные каталоги пихать ничо не надо.. для этого существуют другие директории поиска либ и т.п
Во вторых я не понимаю зачем тогда вообще создавать динамические библиотеки, если их не использует больше ни одно приложение кроме вашего .. может проще все делать монолитно?
У меня в проекте 56 плагинов (пока). Общий функционал вынесен в библиотеку. По-моему логично.
Цитировать
А зачем делать под виндой а отлаживаться под линухом ? о_О
1. Плохо знаю Linux
2. VS
3. Проект кросплатформенный

Цитировать
QtCreator так устанавливается, потому что его ещё нет в дистрибутивах. Скорее всего, что после вставки в дистрибутив, особенно Дебиан, его структура будет сильно другой. В Linux всё принято станвить в файловую систему, и управлять этим через пакетный менеджер. Приватные екзешники кладут в libexec, свои плагины и библиотеки в /usr/lib/myproga/, иконки в /usr/share/icons и т.д.
И много тут народу пишут проекты, которые вставят в дистрибутив???
А что делать, если есть пересечение имён с другой программой?
Как заставить систему искать библиотеки в /usr/lib/myproga/?
Цитировать
только без холиваров, пожалуйста

Моя задача сделать так, чтобы моя прога номально "смотрелась" как под линуксом, так и под виндами. И я прошу совета как это сделать. Причём меня интересует как отладка, так и конечная инсталяция.

И про qt.conf. Кто-нибудь точно знает зачем он нужен? (ассистант читал)


Название: Re: Динамические библиотеки.
Отправлено: Alex Custov от Июнь 24, 2009, 19:53
про библиотеки я погорячился, туда кладут обычно плагины или библиотеки которые напрямую dlopen-ятся. Обычные библы, с которыми линкуются, кладут в /usr/lib или /usr/local/lib. Способ поиска библиотек системой уже обсудили.


Название: Re: Динамические библиотеки.
Отправлено: ритт от Июнь 24, 2009, 20:17
мои пять копеек: хочешь ставить как в венде - ставь в /opt и рули как хочешь :)


Название: Re: Динамические библиотеки.
Отправлено: kuzulis от Июнь 24, 2009, 21:09
еще 10 копеек...

для  установкив венде - структуру (дерево) каталогов делать так как принято в венде

для установки в линуксе - делать пакет, структуру катальгов которого сделать аналогично kde - шным или qt-шным пакетам аппликух, которую можно посмотреть просто открыв какой нить готовый пакет и посмотреть что  и кужа там копируется и т.п.

2 SASA, раз продукт коммерческий (как я понял) на продажу :) - то не будете же вы его  распространять в виде зип архива и т.п. !! ??

по любому нужно будет делать бинарные пакеты и их уже продавать.. !!! и по любому нужны пакеты!!! шо в винде шо в линуксе шо еще где нить!
т.к это удобно и т.п. и т.д.



Название: Re: Динамические библиотеки.
Отправлено: lit-uriy от Июнь 24, 2009, 23:25
после моих экспериментов относительно qt.conf - нужен для задания путей к не основным частям Qt.
Т.е. переводы, плагины ...


Название: Re: Динамические библиотеки.
Отправлено: break от Июнь 25, 2009, 11:28
Цитировать
хочешь ставить как в венде
   -- ох уж эти любители виндовс - в каждой программе своя структура каталогов - и если что-то не так пошло никто кроме авторов ничего не найдет ни файлы настроек ни поврежденную dll - вообще не понимаю зачем это нужно.. Это недостаток т.к. фактически нет системы.


Название: Re: Динамические библиотеки.
Отправлено: kuzulis от Июнь 25, 2009, 13:22
2 break, +пицот :)


Название: Re: Динамические библиотеки.
Отправлено: SASA от Июнь 25, 2009, 13:50
по любому нужно будет делать бинарные пакеты и их уже продавать.. !!! и по любому нужны пакеты!!! шо в винде шо в линуксе шо еще где нить!
т.к это удобно и т.п. и т.д.

Что такое бинарные пакеты?
А есть ли кросплатформенные инстоляторы. Ну чтоб процесс инсталяции выглядил одинаково во всех системах?


Название: Re: Динамические библиотеки.
Отправлено: kuzulis от Июнь 25, 2009, 15:29
Цитировать
Что такое бинарные пакеты?

Эт в винде - app_install.exe
в debiane (и т.п.) - app.deb
в redhat (и т.п.) - app.rpm
в slackware (и т.п.) - app.tgz
в ArchLinux - app.pkg.tar.gz

и т.д.

Цитировать
А есть ли кросплатформенные инстоляторы. Ну чтоб процесс инсталяции выглядил одинаково во всех системах?

я такого не видел...

но для линуксов - есть утилита checkinstall , которая собирает из исходников нужный пакет по выбору...

обычно в линуксе (например в ARCHLINUX :) )
делается оч просто:
1. создается директория
2. в неё кидается архив с исходными кодами приложения
3. в неё кидается специальный файл PKGBUILD - в котором пишутся инструкции для сборки
    содержимое этого файла правится так как нужно и т.п.
4. в неё кидаются если нужно патчи
5. всё это пакуется... и распространяется в виде исходных кодов для Archlinux

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

 myapp-0.3-x86_64.pkg

и этот пакет уже можно инсталлировать в систему.

в других дистрибутивах ситуация аналогичная. всё просто и прозрачно. :)




Название: Re: Динамические библиотеки.
Отправлено: ритт от Июнь 25, 2009, 15:53
очевидно, kuzulis - фанат арклинухи...с таким запалом нам это всё рассказывает...


Название: Re: Динамические библиотеки.
Отправлено: kuzulis от Июнь 25, 2009, 16:02
:) почему б не помоч человеку !  Яж от души!


Название: Re: Динамические библиотеки.
Отправлено: SASA от Июнь 30, 2009, 20:26
2. в неё кидается архив с исходными кодами приложения

У комерческих проектов есть минус - знакомство пользователей с исходниками не подразумивается.  ::)


Название: Re: Динамические библиотеки.
Отправлено: ритт от Июнь 30, 2009, 20:41
а коммерческие проекты для внедрения в Archlinux вряд ли будут покупать :)