Руководство FreeBSD

         

Как установить дополнительные совместно используемые библиотеки


Что, если при установленном linux_base порте ваше приложение все равно сообщает об отсутствии необходимой библиотеки? Как узнать, какая именно нужна библиотека и где ее взять? В принципе, есть два способа. Вам необходимо иметь привилегии суперпользователя для их осуществления.

Если у вас есть доступ к машине, на которой установлен Linux, узнайте, какие библиотеки использует Linux приложение, и просто скопируйте из на свою машину. Например:

Допустим, вы скачали по FTP Linux версию Doom (на Linux машине). Вы можете узнать, какие разделяемые библиотеки нужны Doom при помощи команды ldd linuxdoom:

% ldd linuxdoom

libXt.so.3 (DLL Jump 3.1) => /usr/X11/lib/libXt.so.3.1.0 libX11.so.3 (DLL Jump 3.1) => /usr/X11/lib/libX11.so.3.1.0 libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29

Вам потребуются все файлы, перечисленные в последней колонке. Скопируйте их в директорию /compat/linux на вашей системе, а также создайте символические ссылки на эти файлы, с именами ссылок из первой колонки соответственно. В итоге у вас на машине должны быть следующие файлы:

/compat/linux/usr/X11/lib/libXt.so.3.1.0 /compat/linux/usr/X11/lib/libXt.so.3 -> libXt.so.3.1.0 /compat/linux/usr/X11/lib/libX11.so.3.1.0 /compat/linux/usr/X11/lib/libX11.so.3 -> libX11.so.3.1.0 /compat/linux/lib/libc.so.4.6.29 /compat/linux/lib/libc.so.4 -> libc.so.4.6.29

Замечание: Заметьте, что если у вас уже есть какая-либо из перечисленных библиотек, то ее не нужно копировать заново. Однако, у вас может быть более старая версия. В этом случае, лучше все-таки скопировать библиотеку поздней версии, изменив соответственно ссылку на нее. Предыдущую версию библиотеки можно удалить. Например, пусть у вас есть следующие библиотеки:

/compat/linux/lib/libc.so.4.6.27 /compat/linux/lib/libc.so.4 -> libc.so.4.6.27

и какое-либо приложение требует библиотеку более поздней версии, судя по команде ldd:

libc.so.4 (DLL Jump 4.5pl26) -> libc.so.4.6.29

Если подверсии немного отличаются, копировать /lib/libc.so.4.6.29 необязательно, так как программа, скорее всего, будет нормально работать и с устаревшей версией. Тем не менее, вы можете заменить libc.so:

/compat/linux/lib/libc.so.4.6.29 /compat/linux/lib/libc.so.4 -> libc.so.4.6.29

Замечание: Символические ссылки важны только для Linux программ. Runtime-компоновщик FreeBSD самостоятельно подберет правильные номера версий библиотек, и вам не нужно об этом беспокоиться.



Содержание раздела