Подключение библиотек so из папки с программой

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Подключение библиотек so из папки с программой

Сообщение ya_vanka » 02.03.2015 00:32:22

Добрый день.
Подскажите как настроить проект так, чтобы библиотеки под Linux брались из папки с программой, а не только из usr/lib?
ya_vanka
новенький
 
Сообщения: 89
Зарегистрирован: 07.08.2013 14:28:41

Re: Подключение библиотек so из папки с программой

Сообщение Xenar » 02.03.2015 07:41:49

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/Папка с библиотеками"
по другому вроде бы никак
Аватара пользователя
Xenar
постоялец
 
Сообщения: 158
Зарегистрирован: 08.06.2011 12:54:07

Re: Подключение библиотек so из папки с программой

Сообщение *Rik* » 02.03.2015 14:13:10

ya_vanka писал(а):Добрый день.
Подскажите как настроить проект так, чтобы библиотеки под Linux брались из папки с программой, а не только из usr/lib?

А что мешает вычислить путь где находится приложение и на основе этого пути указать полный путь к библиотеке?
Код: Выделить всё
libname := ExtractFilePath(Application.ExeName) + DirectorySeparator + 'milib.so';
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 451
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: Подключение библиотек so из папки с программой

Сообщение pupsik » 03.03.2015 15:41:09

Не помню: когда появилось такое явление. Но : DynLibs.LoadLibrary('путь/*.so'); вроде нормально подгружает библиотеки.
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Подключение библиотек so из папки с программой

Сообщение ya_vanka » 04.03.2015 18:32:40

Xenar
А "/Папка с библиотеками" - это абсолютный или относительный путь?

И получается мне нужно перед запуском программы всегда выполнять эту команду?
Или можно как-то компилятору/сборщику это передать чтобы он сам это делал?
ya_vanka
новенький
 
Сообщения: 89
Зарегистрирован: 07.08.2013 14:28:41

Re: Подключение библиотек so из папки с программой

Сообщение hinst » 04.03.2015 18:58:13

если функции с модификатором external то надо путь туда пихать (да и то не факт что прокатит); пробовать и до запуска и после запуска - как получится; зависит от того как FPC загружает external-фции и от того как это делает система; скорее всего жизнеспособный вариант - только _до_ запуска
если функции загружаются f := GetProcAddress, то надо в LoadLibrary('...') поменять путь (тоже не факт что прокатит)
не прокатить может из-за каких-нибудь настроек безопасности, я слышал что линукс может не давать загружать .so бибилотеки из нестандартных мест
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Подключение библиотек so из папки с программой

Сообщение *Rik* » 04.03.2015 19:04:06

pupsik писал(а):Не помню: когда появилось такое явление. Но : DynLibs.LoadLibrary('путь/*.so'); вроде нормально подгружает библиотеки.

Разве есть другой путь для динамической загрузки библиотек?

Код: Выделить всё
uses
  DynLibs, FileUtil;

function LoadMyLib(const LibName: string): TLibHandle;
var
  FullLibName: string;
begin
  //Библиотека должна лежать рядом с выполняемым файлом
  //Здесь вычисляется полный путь к ней, LibName имя библиотеки.
  FullLibName := ExtractFilePath(Application.ExeName) + DirectorySeparator + LibName;
  if FileExistsUTF8(FullLibName) then
    Result := LoadLibrary(FullLibName) //Ищем либу в папке с программой
  else //Если либы в папке с программой нет, то
   Result := LoadLibrary(LibName);  //Пытаемся загрузить из системного каталога
end;
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 451
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: Подключение библиотек so из папки с программой

Сообщение hinst » 04.03.2015 19:38:08

есть динамические библиотеки
которые в свою очередь могут загружаться "динамически": LoadLibrary или "статически": external
надо определиться у нас динамическая загрузка динамических библиотек или статическая загрузка динамических библиотек
Если термин "динамические библиотеки" общепринят болеменее, то с динамической и статической загрузкой всё не так очевидно
Давайте определимся уже
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Подключение библиотек so из папки с программой

Сообщение ya_vanka » 05.03.2015 01:09:38

Да, меня интересует статическая загрузка библиотек.
ya_vanka
новенький
 
Сообщения: 89
Зарегистрирован: 07.08.2013 14:28:41

Re: Подключение библиотек so из папки с программой

Сообщение daesher » 05.03.2015 09:03:42

ya_vanka писал(а):Да, меня интересует статическая загрузка библиотек.

Тогда решение - LD_LIBRARY_PATH. На крайний случай - LD_LIBRARY_PATH=$LD_LIBRARY_PATH:. ./<имя приложения>
Хотя, пожалуй, вернее будет LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd` ./<имя приложения>
Всё это можно оформить в виде скрипта, запускающего приложение.
daesher
постоялец
 
Сообщения: 221
Зарегистрирован: 09.03.2010 22:17:14

Re: Подключение библиотек so из папки с программой

Сообщение ya_vanka » 10.03.2015 13:59:20

Спасибо за ответы!
ya_vanka
новенький
 
Сообщения: 89
Зарегистрирован: 07.08.2013 14:28:41


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 243

Рейтинг@Mail.ru