РЕДАКТИРОВАТЬ : нашел ответ - двоичный файл является 32-разрядным, я устанавливал 64-разрядные библиотеки. Установка вроде sudo apt-get install libsdl1.2debian:i386
работает.
Я пытаюсь заставить Dwarf Fortress работать под Ubuntu 14.04. Он поставляется в виде динамически связанного двоичного файла с некоторыми зависимостями, которых у меня еще нет.
Итак, я запускаю ldd
для него:
$ ldd libs/Dwarf_Fortress
linux-gate.so.1 => (0xf76e3000)
libSDL-1.2.so.0 => not found
libgraphics.so => /home/remco/src/df_linux/libs/libgraphics.so (0xf72af000)
libstdc++.so.6 => /home/remco/src/df_linux/libs/libstdc++.so.6 (0xf71d1000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf718b000)
libgcc_s.so.1 => /home/remco/src/df_linux/libs/libgcc_s.so.1 (0xf7170000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf6fc1000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf6fa5000)
/lib/ld-linux.so.2 (0xf76e4000)
libgtk-x11-2.0.so.0 => not found
libgobject-2.0.so.0 => not found
libSDL-1.2.so.0 => not found
libSDL_image-1.2.so.0 => not found
libGLU.so.1 => not found
libSDL_ttf-2.0.so.0 => not found
Давайте перейдем к первому. apt-file search
говорит мне, что libSDL-1.2.so.0
предоставляется 'libsdl1.2debian', поэтому я устанавливаю его.
Конечно же:
$ ls -l /usr/lib/x86_64-linux-gnu/libSDL*
lrwxrwxrwx 1 root root 20 mei 10 06:40 /usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0 -> libSDL-1.2.so.0.11.4
-rw-r--r-- 1 root root 427600 mei 10 06:40 /usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0.11.4
И этот каталог упоминается в /etc/ld.so.conf.d/x86_64-linux-gnu.conf
.
ldconfig
тоже работает, по крайней мере, кроме некоторых предупреждающих сообщений (извините за нидерландский язык):
$ sudo ldconfig -v | grep libSDL
/sbin/ldconfig.real: Kan status van /lib/i686-linux-gnu niet opvragen: Bestand of map bestaat niet
/sbin/ldconfig.real: Kan status van /usr/lib/i686-linux-gnu niet opvragen: Bestand of map bestaat niet
/sbin/ldconfig.real: Pad '/lib/x86_64-linux-gnu' is meerdere malen opgegeven
/sbin/ldconfig.real: Pad '/usr/lib/x86_64-linux-gnu' is meerdere malen opgegeven
/sbin/ldconfig.real: /lib/i386-linux-gnu/ld-2.19.so is the dynamic linker, ignoring
/sbin/ldconfig.real: /lib/x86_64-linux-gnu/ld-2.19.so is the dynamic linker, ignoring
libSDL-1.2.so.0 -> libSDL-1.2.so.0.11.4
Ошибки "meerdere malen opgegeven" означают, что путь встречается несколько раз в / etc /ld.so.conf.d/, мне кажется, в порядке.
Последняя строка сообщает мне, что нужный файл был найден. К сожалению, ldd
по-прежнему дает тот же результат, что и выше .
Есть ли шаг, который я пропускаю? Нужно ли что-то перезагрузить? Насколько я вижу, ldconfig
работает правильно, но ldd
все еще не находит файл, и я думал, что это будет.
Проблема состояла в том, что Dwarf_Fortress был 32-разрядным двоичным файлом (я узнал с file Dwarf_Fortress
), и библиотеки, которые я устанавливал, были 64-разрядными. Добавление :i386
в конце способного - добирается, команда устанавливает i386 версии библиотек, и это работает.