Russian Qt Forum
Июнь 16, 2024, 04:46 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Динамические библиотеки.  (Прочитано 13984 раз)
SASA
Гость
« : Июнь 22, 2009, 14:15 »

Здравствуйте.
Как заставить кутэ приложение под linux искать библиотеки в каталоге с исполняемым файлом.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #1 : Июнь 22, 2009, 14:24 »

А нет смысла в этом.. т.к.  идея и архитектура в Linux иная нежели в Windows...

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

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

ArchLinux x86_64 / Win10 64 bit
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #2 : Июнь 22, 2009, 14:27 »

и это нужно заставлять НЕ ПРИЛОЖЕНИЕ ИСКАТЬ - а заставлять сам ЛИНУКС искать там где нужно их...

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

Записан

ArchLinux x86_64 / Win10 64 bit
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #3 : Июнь 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

и т.п. думаю дальше сам Улыбающийся
Записан

ArchLinux x86_64 / Win10 64 bit
SASA
Гость
« Ответ #4 : Июнь 22, 2009, 16:31 »

За первые три ссылки из гугла спасибо Смеющийся

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

Сообщений: 3880


Просмотр профиля WWW
« Ответ #5 : Июнь 22, 2009, 17:15 »

>>Как заставить кутэ приложение под linux искать библиотеки в каталоге с исполняемым файлом.
см. qt.conf
Записан

Юра.
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #6 : Июнь 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 создастся ссылка на твою либу Улыбающийся

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

ArchLinux x86_64 / Win10 64 bit
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #7 : Июнь 23, 2009, 00:12 »

1) создай скрипт, который будет называться так же как и твоя прога, а прогу переименуй в proga.bin
2) в скрипте делай

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

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

P.S. очевидно речь идёт о машине где нет рутовских прав? Улыбающийся
« Последнее редактирование: Июнь 23, 2009, 00:14 от AX » Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #8 : Июнь 23, 2009, 01:45 »

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

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

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

В приведенной строке задан каталог lib в качестве местоположения библиотек - т.е. в текущем каталоге откуда был произведен запуск программы должны быть подпапка lib со всеми библиотеками. Также отладчик работает без проблем.
« Последнее редактирование: Июнь 23, 2009, 01:48 от break » Записан
SASA
Гость
« Ответ #9 : Июнь 23, 2009, 16:49 »

см. qt.conf

Насколько я понял эта штука нужна, чтобы указать где лежит библиотеки, плагины, переводы самого куте. А заставить прогу найти мою библиотеку с помощью qt.conf у меня не вышло.



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

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

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

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

Про каталоги, отладку и т.п.
Я думаю,что это нужно не только на этапе разработки программы.
Я ставил qtcreator. Виндус подобный инсталятор, таже политика расположения программы в фаловой структуре, иконки, менюхи и даже деинстолятор. Не понимаю зачем пихать свои библиотеки в системные каталоги. Я разрабатывю всё под виндой, а под линухом только отлаживаюсь. Причём это мой такой первый проект (чисто комерческий продукт).  Естественно, я не понимаю философии линукса, а  пытаюсь внедрять видовс решения. И не вижу в них нечего плохого. Может я ошибаюсь, но инсталяция программы аля виндовс очень хорошее решение, так сказать, близкое к простому пользователю.
Жду коментариев.
« Последнее редактирование: Июнь 23, 2009, 16:57 от SASA » Записан
ритт
Гость
« Ответ #10 : Июнь 23, 2009, 17:10 »

> Жду коментариев.
только без холиваров, пожалуйста
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #11 : Июнь 23, 2009, 17:39 »

Я думаю троли знают про QMAKE_LFLAGS, но почему-то его не используют.

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

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

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

Ну а что может быть проще aptitude install? Улыбающийся
« Последнее редактирование: Июнь 23, 2009, 17:45 от AX » Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #12 : Июнь 23, 2009, 18:09 »

Цитировать
Ну а что может быть проще aptitude install?

pacman -Suy

Улыбающийся

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

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

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

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

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

 И нечо в чужой монастырь со своим уставом идти Улыбающийся

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





« Последнее редактирование: Июнь 23, 2009, 18:28 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
Rcus
Гость
« Ответ #13 : Июнь 23, 2009, 19:35 »

Во вторых я не понимаю зачем тогда вообще создавать динамические библиотеки, если их не использует больше ни одно приложение кроме вашего .. может проще все делать монолитно? Улыбающийся
Вот насчет этого я могу сказать пару слов. У многих KDE приложений есть не только полновесный GUI, но и минималистичный плазмоид. У KMLDonkey например вся функциональность связи с ядром MLDonkey (реализация сетевого протокола, хранение низкоуровневых структур данных, передача команд ядру) вынесена в библиотеку и, хотя библиотека не очень большая (500кб в релизе), но все же линковать ее статически как-то некошерно.
Записан
SASA
Гость
« Ответ #14 : Июнь 24, 2009, 19:42 »

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

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

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

И про qt.conf. Кто-нибудь точно знает зачем он нужен? (ассистант читал)
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.057 секунд. Запросов: 22.