Linux vs Solaris - Компиляция программного обеспечения - PullRequest
0 голосов
/ 24 февраля 2011

Справочная информация:

На работе я привык работать над Solaris 10. У нас есть системные администраторы, которые знают, что они делают, и могут помочь в случае необходимости.

Я скомпилировалтакие вещи, как apache, perl и mod_perl из исходного кода без каких-либо проблем.

Мне дали сервер Redhat для игры, и я сталкиваюсь с проблемами.В настоящий момент системные администраторы больны.

Я продолжаю сталкиваться с проблемами, связанными с LD_LIBRARY_PATH при сборке программного обеспечения.На данный момент для целей тестирования я компилирую в свой домашний каталог, так как у меня нет прав root или разрешений для установки в другом месте.

Я планирую иметь область под / opt для нас, чтобы установить в нее, как мы делаем на Solaris, но мне понадобится системный администратор, чтобы создать это для нас.ничего не было для LD_LIBRARY_PATH, так что я добавлял что-то к этому, чтобы собрать вещи (например, ffmpeg из исходного кода).Я читал об этом, и, видимо, это не тот путь, он ненадежен или что-то в этом роде.У меня нет доступа к ldconfig (разрешение запрещено).

Теперь очереди:

Каков наилучший способ создания приложений под Linux, чтобы они не ломались?Создание записей в /etc/ld.so.conf.d/?

Может кто-нибудь дать краткий обзор того, что на самом деле делает LD_LIBRARY_PATH?

Ответы [ 3 ]

0 голосов
/ 24 февраля 2011

LD_LIBRARY_PATH позволяет отдельным пользователям или отдельным процессам добавлять местоположения в путь поиска на детальной основе./etc/ld.so.conf следует использовать для настройки пути к общесистемной библиотеке, то есть для развертывания приложения.(Еще лучше, если вы можете упаковать его как rpm / deb и развернуть его через обычные каналы пакетов вашего дистрибутива)

Обычно пользователь может использовать LD_LIBRARY_PATH, чтобы заставить выполнение своей программы выбрать другую версию библиотеки.,Обычно это полезно для поддержки отладочных или инструментальных версий библиотек, но вы также можете использовать их для внедрения собственного кода в сторонний код.(Также возможно иногда использовать это в злонамеренных целях, если вы можете изменить чей-то профиль bash, чтобы обманным путем заставить его выполнить ваш код, не осознавая этого).

Некоторые приложения также устанавливают LD_LIBRARY_PATH, если они устанавливают «частные» библиотеки в расположениях не по умолчанию, т. Е. Они не будут использоваться для обычного динамического связывания, но все еще существуют.Для подобных сценариев я бы предпочел dlopen() и друзей.

0 голосов
/ 24 февраля 2011

Настройка LD_LIBRARY_PATH считается вредной, потому что (среди прочих причин):

  1. Ваша программа динамически связана на основе вашей LD_LIBRARY_PATH.Это означает, что он может ссылаться на определенную версию библиотеки, которая оказалась в вашем LD_LIBRARY_PATH например /home/user/lib/libtheora.so.Это может привести к путанице, если кто-то попытается запустить его без вашего LD_LIBRARY_PATH и в конечном итоге будет ссылаться на версию по умолчанию, например, в /usr/lib/libtheora.so.
  2. . Используется в предпочтении перед любым системным путем по умолчанию.,Это означает, что, если у вас в конце концов окажется хитрая libc LD_LIBRARY_PATH, это может привести к плохим вещам, таким как взлом вашей учетной записи.

Как сказал Игнасио, используйте пакеты везде, где можете.Это позволяет избежать библиотечных кошмаров.

0 голосов
/ 24 февраля 2011

со страницы руководства ld.so(8):

  LD_LIBRARY_PATH
          A colon-separated list of directories in which to search for ELF
          libraries at execution-time.  Similar to  the  PATH  environment
          variable.

Но, если честно, найди админа. Станьте одним из них, если потребуется. Да, и собирать пакеты.

...