Russian Qt Forum
Ноябрь 26, 2024, 00:25
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
Динамические библиотеки.
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Динамические библиотеки. (Прочитано 14319 раз)
SASA
Гость
Динамические библиотеки.
«
:
Июнь 22, 2009, 14:15 »
Здравствуйте.
Как заставить кутэ приложение под linux искать библиотеки в каталоге с исполняемым файлом.
Записан
kuzulis
Джедай : наставник для всех
Offline
Сообщений: 2812
Re: Динамические библиотеки.
«
Ответ #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
Сообщений: 2812
Re: Динамические библиотеки.
«
Ответ #2 :
Июнь 22, 2009, 14:27 »
и это нужно заставлять НЕ ПРИЛОЖЕНИЕ ИСКАТЬ - а заставлять сам ЛИНУКС искать там где нужно их...
Поищи инфу в гугле по ключевым словам ldd и вообще про идею ! т.е как загрузчик исполняемых файло в Линуксе ищет динамические библиотеки и т.п.!
Записан
ArchLinux x86_64 / Win10 64 bit
kuzulis
Джедай : наставник для всех
Offline
Сообщений: 2812
Re: Динамические библиотеки.
«
Ответ #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
Гость
Re: Динамические библиотеки.
«
Ответ #4 :
Июнь 22, 2009, 16:31 »
За первые три ссылки из гугла спасибо
И всё же. Ниужели все программы под линух хранят свои дллки в общих каталогах?
Например, у QtCreator в бинах лежат его дллки, а записи в ld.so.conf нету. Может это плагины, но они бы лежали в папочке с названием типа plugins.
Записан
lit-uriy
Джедай : наставник для всех
Offline
Сообщений: 3880
Re: Динамические библиотеки.
«
Ответ #5 :
Июнь 22, 2009, 17:15 »
>>Как заставить кутэ приложение под linux искать библиотеки в каталоге с исполняемым файлом.
см.
qt.conf
Записан
Юра.
kuzulis
Джедай : наставник для всех
Offline
Сообщений: 2812
Re: Динамические библиотеки.
«
Ответ #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
Сообщений: 2063
Re: Динамические библиотеки.
«
Ответ #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
Сообщений: 846
Re: Динамические библиотеки.
«
Ответ #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
Гость
Re: Динамические библиотеки.
«
Ответ #9 :
Июнь 23, 2009, 16:49 »
Цитата: lit-uriy от Июнь 22, 2009, 17:15
см.
qt.conf
Насколько я понял эта штука нужна, чтобы указать где лежит библиотеки, плагины, переводы самого куте. А заставить прогу найти мою библиотеку с помощью
qt.conf
у меня не вышло.
Цитата: break от Июнь 23, 2009, 01:45
Код:
QMAKE_LFLAGS += -Wl,-rpath,lib
В приведенной строке задан каталог lib в качестве местоположения библиотек - т.е. в текущем каталоге откуда был произведен запуск программы должны быть подпапка lib со всеми библиотеками. Также отладчик работает без проблем.
Такой ответ я и искал. Спасибо.
Но уже сделал как описал AX. И наверное останавлюсь на этом решении, потому что так сделан qtcreator. Я думаю троли знают про QMAKE_LFLAGS, но почему-то его не используют.
Про каталоги, отладку и т.п.
Я думаю,что это нужно не только на этапе разработки программы.
Я ставил qtcreator. Виндус подобный инсталятор, таже политика расположения программы в фаловой структуре, иконки, менюхи и даже деинстолятор. Не понимаю зачем пихать свои библиотеки в системные каталоги. Я разрабатывю всё под виндой, а под линухом только отлаживаюсь. Причём это мой такой первый проект (чисто комерческий продукт). Естественно, я не понимаю философии линукса, а пытаюсь внедрять видовс решения. И не вижу в них нечего плохого. Может я ошибаюсь, но инсталяция программы аля виндовс очень хорошее решение, так сказать, близкое к простому пользователю.
Жду коментариев.
«
Последнее редактирование: Июнь 23, 2009, 16:57 от SASA
»
Записан
ритт
Гость
Re: Динамические библиотеки.
«
Ответ #10 :
Июнь 23, 2009, 17:10 »
> Жду коментариев.
только без холиваров, пожалуйста
Записан
Alex Custov
Джедай : наставник для всех
Offline
Сообщений: 2063
Re: Динамические библиотеки.
«
Ответ #11 :
Июнь 23, 2009, 17:39 »
Цитата: SASA от Июнь 23, 2009, 16:49
Я думаю троли знают про QMAKE_LFLAGS, но почему-то его не используют.
-rpath не рекомендуется к использованию, например в Дебиане:
http://wiki.debian.org/RpathIssue
Цитата: SASA от Июнь 23, 2009, 16:49
Может я ошибаюсь, но инсталяция программы аля виндовс очень хорошее решение, так сказать, близкое к простому пользователю.
QtCreator так устанавливается, потому что его ещё нет в дистрибутивах. Скорее всего, что после вставки в дистрибутив, особенно Дебиан, его структура будет сильно другой. В Linux всё принято станвить в файловую систему, и управлять этим через пакетный менеджер. Приватные екзешники кладут в libexec, свои плагины и библиотеки в /usr/lib/myproga/, иконки в /usr/share/icons и т.д.
Ну а что может быть проще aptitude install?
«
Последнее редактирование: Июнь 23, 2009, 17:45 от AX
»
Записан
kuzulis
Джедай : наставник для всех
Offline
Сообщений: 2812
Re: Динамические библиотеки.
«
Ответ #12 :
Июнь 23, 2009, 18:09 »
Цитировать
Ну а что может быть проще aptitude install?
pacman -Suy
Цитировать
Я ставил qtcreator. Виндус подобный инсталятор, таже политика расположения программы в фаловой структуре, иконки, менюхи и даже деинстолятор.
Ну еще таким же образом как и QtCreator "работает" и Firefox скачанный в бинарном виде с их сайта.. т.е. запуск идет через скрипт (эт то что я знаю)
Цитировать
Не понимаю зачем пихать свои библиотеки в системные каталоги.
Ну во первых в системные каталоги пихать ничо не надо.. для этого существуют другие директории поиска либ и т.п
Во вторых я не понимаю зачем тогда вообще создавать динамические библиотеки, если их не использует больше ни одно приложение кроме вашего .. может проще все делать монолитно?
Цитировать
Я разрабатывю всё под виндой, а под линухом только отлаживаюсь. Причём это мой такой первый проект (чисто комерческий продукт).
А зачем делать под виндой а отлаживаться под линухом ? о_О
Цитировать
Естественно, я не понимаю философии линукса, а пытаюсь внедрять видовс решения. И не вижу в них нечего плохого.
И нечо в чужой монастырь со своим уставом идти
Цитировать
Может я ошибаюсь, но инсталяция программы аля виндовс очень хорошее решение, так сказать, близкое к простому пользователю.
тут вопрос спорный
«
Последнее редактирование: Июнь 23, 2009, 18:28 от kuzulis
»
Записан
ArchLinux x86_64 / Win10 64 bit
Rcus
Гость
Re: Динамические библиотеки.
«
Ответ #13 :
Июнь 23, 2009, 19:35 »
Цитата: kuzulis от Июнь 23, 2009, 18:09
Во вторых я не понимаю зачем тогда вообще создавать динамические библиотеки, если их не использует больше ни одно приложение кроме вашего .. может проще все делать монолитно?
Вот насчет этого я могу сказать пару слов. У многих KDE приложений есть не только полновесный GUI, но и минималистичный плазмоид. У KMLDonkey например вся функциональность связи с ядром MLDonkey (реализация сетевого протокола, хранение низкоуровневых структур данных, передача команд ядру) вынесена в библиотеку и, хотя библиотека не очень большая (500кб в релизе), но все же линковать ее статически как-то некошерно.
Записан
SASA
Гость
Re: Динамические библиотеки.
«
Ответ #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
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...