LINUX.ORG.RU

Как сделать так, чтобы so-шки к бинарнику искались в его директории?

 


1

1

Пишем проектик на плюсах и CMake. К нему подключаются некоторые библиотеки, которые могут отсутствовать на многих машинах, поэтому в релизную версию включаются so-шники этих библиотек, лежащие там же, где и запускаемый бинарник.

В данный момент запуск на других производится путём установки LD_LIBRARY_PATH=«$PWD». Можно ли этого избежать ещё на этапе компиляции, или лучше просто написать стартовый скрипт и забить на всё это?


Вы, наверное, хотели сказать «ещё на этапе линковки». Линковщику всё равно где располагаются динамические библиотеки, с которыми он линкует бинарник. Линковка вообще не про расположение динамических библиотек.

А вот при запуске бинарника начинает работать ld*.so («динамический связыватель/загрузчик»), который и начинает искать динамические библиотеки по тем путям, которые прописаны в его конфиге /etc/ld.so.conf . $LD_LIBRARY_PATH относится именно к ld*.so.

saahriktu ★★★★★
()
Ответ на: комментарий от saahriktu

Не, статическая линковка не вариант. Слишком лень все библиотеки пересобирать под статические.

tsmx
() автор топика

-Wl,-rpath=

anonymous
()

А по-нормальному нельзя? Опакетить проектик, прописать зависимости, опакетить библиотеки для дистров где их нет.

legolegs ★★★★★
()

Через RPATH.

EXL ★★★★★
()

Фуфуфу какая гадость, криворукие погромисты хуже всего на свете. Незачем тянуть мерзкие привычки из Ыиндовс, вместо грязных засранных бинарников пишите лучше в скрипте запускающем приложение LD_LIBRARY_PATH="$PWD/libs".

linuxnewbie
()

LD_LIBRARY_PATH="$PWD"

Это не «в его директории», а «в текущей директории». Разница огромная — если из другого места запускать (по абсолютному пути, например), не найдётся. Надо так:

LD_LIBRARY_PATH="$(dirname "$0")"
anonymous
()

При линковке:

-Wl,-rpath,'$ORIGIN/..'
anonymous
()
Ответ на: комментарий от anonymous

Чтобы нормально работало без нестандартного подземного стука.

legolegs ★★★★★
()

Окей, я понял.

Напишу скрипт, а rpath возьму на вооружение. Всем спасибо.

tsmx
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.