Программа evince
жалуется, что не может найти libfreetype.so.6; однако у меня явно есть файл, и он включен в мою LD_LIBRARY_PATH; кроме того, у меня есть другая программа, которая использует libfreetype6 и может работать очень хорошо. Что здесь происходит?
jbud@jb-pc ~> evince
evince: error while loading shared libraries: libfreetype.so.6: cannot open shared object file: No such file or directory
jbud@jb-pc ~> ldd /usr/bin/evince | grep freetype
libfreetype.so.6 => /usr/local/lib/libfreetype.so.6 (0x00007f912179d000)
jbud@jb-pc ~> file /usr/local/lib/libfreetype.so.6
/usr/local/lib/libfreetype.so.6: symbolic link to `libfreetype.so.6.11.1'
jbud@jb-pc ~> file /usr/local/lib/libfreetype.so.6.11.1
/usr/local/lib/libfreetype.so.6.11.1: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=0x21a4b8005e0c9a42af001b35fb984f4e25efc71c, not stripped
jbud@jb-pc ~> echo $LD_LIBRARY_PATH
/usr/lib/:/usr/lib64/:/usr/lib/x86_64-linux-gnu/:/usr/local/lib/
jbud@jb-pc ~> ldd jdrive/jstuff/work/personal/noengine/client | grep freetype
libfreetype.so.6 => /usr/local/lib/libfreetype.so.6 (0x00007feb5ac89000)
Создание символической ссылки на /usr/lib/libfreetype.so.6
не следует применять , если возникла ошибка 32-разрядного приложения в 64-разрядном дистрибутиве Linux. Библиотеку можно оставить «сломанной».
В 64-битной системе вы хотите установить необходимые 32-битные зависимости вокруг 32-битного приложения, чтобы оно могло обнаруживать и использовать уже существующее libfreetype.so.6
. Это отличается в зависимости от приложения, но обычно отсутствует:
sudo apt-get install libgtk2.0-0:i386 libidn11:i386 libglu1-mesa:i386
И это, возможно, также может решить проблему:
sudo apt-get install libpangox-1.0-0:i386 libpangoxft-1.0-0:i386
С уважением, Альберт Кок
Мне удалось решить эту проблему, однако я все еще не совсем уверен, почему это была проблема в первую очередь.
После запуска strace я увидел open("/usr/local/lib/libfreetype.so.6", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied)
, что не совсем имеет смысла, так как другие программы (без полномочий sudo), которые зависели от libfreetype, могли запускаться, и разрешения для чтения / записи установлены для всех, также работающих Evince под sudo тоже не помог.
Мой apt-get из libfreetype поместил библиотеку в /usr/lib/x86_64-linux-gnu/libfreetype.so.6, но по какой-то причине даже не проверял эту папку (хотя она была добавлена в LD_LIBRARY_PATH). Однако я создал символическую ссылку на папку, которую он проверяет sudo ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so.6.10.1 /usr/lib/libfreetype.so.6
, и теперь все работает нормально.