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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: проект и динамическая библиотека  (Прочитано 4060 раз)
mokynis
Самовар
**
Offline Offline

Сообщений: 176


Просмотр профиля
« : Октябрь 04, 2010, 09:16 »

пытаюсь по Шлее написать программку, которая бы использовала внешнюю библиотеку. Ничего не получается. Читал http://www.prog.org.ru/topic_8259_15.html Там и библиотека, и сама программа собираются в рамках одного проекта. Я хочу, чтобы программа и библиотека были каждая сама по себе-2 отдельных проекта. Хоть как-то запустить удалось только из среды Qt Creator'а. При попытке запустить программку саму по себе, лается, что
Цитировать
error while loading shared libraries: libmyLib.so.1: cannot open shared object file: No such file or directory
Вот тут http://forum.vingrad.ru/forum/topic-307288.html советуют изменить переменную среды, но не хочется засорять LIBRARY_PATH - мало ли где и каких библиотек пока учу я тут наклепаю. Как можно подцепить библиотеку, которая находится ну, хотя бы там же, где и запускается ее использующая программа? Свой опус прилагаю
« Последнее редактирование: Октябрь 04, 2010, 09:21 от mokynis » Записан

QT4, Qt5, Qt6 Debian, ArchLinux
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #1 : Октябрь 04, 2010, 09:31 »

1. Для тестирования в процессе разработки можно довольствоваться LIBRARY_PATH
2. Но, когда уже все перепроверено и оттестировано - то нужно создать под конкретный дистр линукса "инсталляционный" пакет с вашей программой, который бы включал: сам бинарь приложения + бинарь/бинари разделяемой библиотеки + другие необходимые файлы (которые Вы считаете необходимыми). При этом после установки вашего пакета бинарики автоматом установятся в /usr/bin, библиотеки в /usr/lib, остальные файлы или в /etc или еще куда. Хотя пути установки будут зависеть от типа используемого дистрибутива.
3. Чтобы сделать универсальную "инсталляшку" (с условием, что ваша программка будет лежать в какой-то одной директории и содержать бинарики и библиотеки в этой директории <ну или в нескольких поддиректориях вашей директории>) вы должны, например,  создать скрипт в котором бы было прописано LIBRARY_PATH (т.е. аналогично п.1.) и другие сопусттвующие данные. И теперь, для того чтобы запустить вашу программу нужно запустить скрипт, который все сделает сам.

Как то так.

Я бы сделал п.2.

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

По какому пути Вам идти - решать Вам.

ЗЫ:
1. тема не относится к Qt в принципе.
2. мусолилать уже стопиццот раз.
« Последнее редактирование: Октябрь 04, 2010, 09:36 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
SASA
Гость
« Ответ #2 : Октябрь 04, 2010, 10:35 »

По поводу пункта 3 можно подсмотреть как это делает КуТэ Кретор.
Записан
mokynis
Самовар
**
Offline Offline

Сообщений: 176


Просмотр профиля
« Ответ #3 : Октябрь 04, 2010, 14:25 »

to kuzulis
а можно поподробней про 4 пункт? Кажется, это как раз то, что хотелось. Путь я и в самой программе пропишу если что... Главное принцип-что сделать чтобы без лишнего мусора в самой системе воспользоваться библиотекой. Ну не хочу я забивать свой Linux своим же мусором
Записан

QT4, Qt5, Qt6 Debian, ArchLinux
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #4 : Октябрь 04, 2010, 14:36 »

Цитировать
to kuzulis
а можно поподробней про 4 пункт? Кажется, это как раз то, что хотелось. Путь я и в самой программе пропишу если что... Главное принцип-что сделать чтобы без лишнего мусора в самой системе воспользоваться библиотекой. Ну не хочу я забивать свой Linux своим же мусором
Тогда используй :
1. ИЛИ QPluginLoader, он как раз для этого и предназначен. Это если в том случае если твоей библиотекой будет пользоваться только твое приложение или другие приложения написаные на Qt4.

2. ИЛИ QLibrary, но в этом случае придется немножко подшаманить с исходниками твоей библиотеки в части макросов EXPORT/IMPORT.
Описание как это сделать есть в ассистенте.
И тогда ею могут пользоваться любые приложения (например написанные на чистом С/С++ и т.п.)

Все зависит от того что тебе нужно. Читай, разбирайся.  Улыбающийся
---




Записан

ArchLinux x86_64 / Win10 64 bit
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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