LINUX.ORG.RU

Напомните соременые соглашения как держать в системе одновременно две версии библиотеки и переключатся между ними?

 , , ,


0

1

Вопрос в контексте JEMalloc скомпиленного в debug mode и release mode.

Мнения в других контекстах тоже интересуют.

В обеих случаях подразумевается что будет включена отладочная информация и бинарники не будут стрипнуты.

★★★★★

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

libsome.so.x.y.z
as release &
libsome.so.x.y.z-d
as debug)

anonymous ()

libsome.so это обычно симлинк на libsome.so.1.2.3 или libsome.so.1.2.4 в системе, меняй симлинк и всё, а приложение должно требовать libsome.so, при этом в самой библиотеке должен быть захардкожен номер версии библиотеки что бы приложение проверяло нужное ли ей суют или нет.

Deleted ()

В приличных домах это делают через симлинки. Например, в /usr/lib может лежать, скажем, libGL.so, указывающий на mesa/libGL.so или nvidia/libGL.so

На скорую руку можно держать директорию с дебажными библиотеками в ./debug, релизные библиотеки оставить в системных директориях. Тогда дебажный запуск сведется к LD_LIBRARY_PATH=./debug:$LD_LIBRARY_PATH ./binary

kawaii_neko ★★★ ()

Смотря для чего, рекомендую глянуть Nix

anonymous ()

Сомневаюсь, что есть общепринятые соглашения. Если речь о Debian и пакетах - https://wiki.debian.org/DebianAlternatives (в Redhat тоже есть аналог); если чисто для себя - костылить симлинки.

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

К библиотекам обычно такое не применяют.

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

Обычно с библиотеками не делают и того, что ты хочешь сделать. alternatives, по крайней мере, стандартный системный способ, решающий приведенную задачу.

anonymous ()

Я как-то делал

  if (debug_mode == 0) {
    p_lib_handle = dlopen ("./libtest_release.so", RTLD_LAZY);
  }
  else {
    p_lib_handle = dlopen ("./libtest_debug.so", RTLD_LAZY);
  }
alx777 ()
Ответ на: комментарий от Deleted

libsome.so — это симлинк на конкретную версию для того, чтобы компилятор при сборке принимал всегда ключ -lsome, а конкретная версия бралась из системы, что там установлено сейчас. В бинарник при этом вписывается soname библиотеки (например, libsome.so.1.2.3) и при загрузке будет искаться файл именно с таким именем. Симлинка libsome.so при этом в системе может попросту не быть. Некоторые библиотеки идут даже дальше: в soname вписывается libsome.so.1, а симлинк libsome.so.1 в системе может указывать как на libsome.so.1.2.3, так и на libsome.so.1.5.6, если версии 1.2.3 и 1.5.6 бинарно совместимы.

ilammy ★★★ ()

Фундаментально эта проблема решена в Nix.

anonymous ()

Брать пути к библиотекам из переменных окружения. Для тестов инклудишь одно, для релиза - другое.

shell-script ★★★★★ ()
Ответ на: комментарий от anonymous

Фундаментально nix нормально не решает проблему запуска одного и того же бинарника с разными библиотеками.

shell-script ★★★★★ ()

Напомните соременые соглашения как держать в системе одновременно две версии библиотеки и переключатся между ними?

установить и использовать gentoo.

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

использовать gentoo.

это же несовременно и даже ретроградство

not_rj45 ()
Ответ на: комментарий от shell-script

Для отладки есть LD_PRELOAD, он прекрасно работает с Nix.

Для продакшона все зависимости должны быть строго фиксированными (как в Nix).

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

LD_PRELOAD - это переменная окружения.

Про продакшн у ТС и в моём ответе ничего не было. Было про проверку работоспособности одного и того же бинарника с разными библиотеками(девелоперской и релизной), насколько я понял.

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

LD_PRELOAD - это переменная окружения.

Это хорошо или плохо?

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

Хорошо. Но ты, видимо другой анонимус. Там выше какой-то твой собрат сказал, что использовать переменные окружения плохо для этой задачи.

shell-script ★★★★★ ()

Если тебе нужно чисто для проверки и отладки - то LD_PRELOAD, как и советовали.

Meyer ★★★★ ()

А зачем их держать в системе? Клади рядом со своей программой.

Reset ★★★★★ ()

все сказали, и я скажу. Nix.

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