Название: Динамические библиотеки. Отправлено: 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. Плохо знаю Linux2. 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 вряд ли будут покупать :)
|