2015-09-12 5 views
-1

Мне нужно было запустить утилиту Ubuntu «convert», и когда я это сделал, у меня появилось сообщение об ошибке, что моя версия libpng устарела и должна быть обновлена. Итак, я пошел обычным путем «apt-get install», но по причинам, которые я теперь больше не помню, это не решило проблему. Здесь все стало беспорядочно. Я загрузил источник для libpng, сделал make и make install. У меня теперь есть следующие файлы в/usr/local/lib:Ubuntu: Обновление libpng

-rw-r--r-- 1 root root 821564 2015-09-11 18:37 /usr/local/lib/libpng16.a 
-rwxr-xr-x 1 root root 937 2015-09-11 18:37 /usr/local/lib/libpng16.la 
lrwxrwxrwx 1 root root  19 2015-09-11 18:37 /usr/local/lib/libpng16.so -> libpng16.so.16.18.0 
lrwxrwxrwx 1 root root  19 2015-09-11 18:37 /usr/local/lib/libpng16.so.16 -> libpng16.so.16.18.0 
-rwxr-xr-x 1 root root 602132 2015-09-11 18:37 /usr/local/lib/libpng16.so.16.18.0 
lrwxrwxrwx 1 root root  10 2015-09-11 18:37 /usr/local/lib/libpng.a -> libpng16.a 
lrwxrwxrwx 1 root root  11 2015-09-11 18:37 /usr/local/lib/libpng.la -> libpng16.la 
lrwxrwxrwx 1 root root  11 2015-09-11 18:37 /usr/local/lib/libpng.so -> libpng16.so 

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

convert: error while loading shared libraries: libpng.so.2: cannot open shared object file: No such file or directory 

В отчаянии я создал следующую ссылку:

lrwxrwxrwx 1 root root  34 2015-09-11 18:39 /usr/local/lib/libpng.so.2 -> /usr/local/lib/libpng16.so.16.18.0 

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

ответ

1

Вы можете проверить, где программа загружает библиотеки с помощью переменной окружения LD_DEBUG. Например, вы можете запустить:

LD_DEBUG=all convert 

Чтобы увидеть тонну отладочной информации. Вы можете запустить:

LD_DEBUG=libs convert 

Чтобы увидеть список всех библиотек convert динамически загружается. В вашем случае, вы можете быть более конкретным, запустив:

LD_DEBUG=libs convert 2>&1 | grep -i png 

Пример вывода


 20939: find library=libpng12.so.0 [0]; searching 
    20939: trying file=/lib/i386-linux-gnu/libpng12.so.0 
    20939: calling init: /lib/i386-linux-gnu/libpng12.so.0 
    -quality value  JPEG/MIFF/PNG compression level 
    20939: calling fini: /lib/i386-linux-gnu/libpng12.so.0 [0] 

Вы также можете использовать ldd команду, то есть: ldd convert для достижения аналогичных результатов, как отмечено @meuh.

Теперь, чтобы вызвать слона в комнате: Ubuntu имеет управление пакетами через apt по какой-то причине: поэтому вы не нарушаете свои зависимости. Если вы действительно нуждаетесь в новой версии библиотеки, вы должны:

  • Pull the prebuilt package from LaunchPad.net. По крайней мере, таким образом, это пакет, который можно вернуть/деинсталлировать с минимальными трудностями в будущем.
  • Используйте инструмент «make install» для захвата/упаковки, например checkinstall. Он захватывает выходные файлы/изменения со стадии «make install» для создания пакета из исходного кода, поэтому вы можете рассматривать его как обычный пакет, вместо того, чтобы искать и вручную очищать/удалять файлы, созданные с помощью прямого запуска make install. Вы должны делать только это на системах, где, как ожидается, вручную обрабатывать DEPS, like good ol' Slackware. :)

В будущем ...

Вместо установки Libpng напрямую, вы можете просто создать его с помощью make, скопировать библиотеки/бинарные файлы во временную папку (например: /home/yourname/tmp), и запустить convert через:

LD_LIBRARY_PATH=/home/yourname/tmp convert 

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

+1

есть команда 'ldd'. – meuh

+0

@meuh Это правильно. Я пошел по этому маршруту, потому что я хотел перейти к использованию 'LD_LIBRARY_PATH' для будущего тестирования. Я уточню ответ, чтобы упомянуть об этом. – DevNull

+0

Спасибо за понимание. Теперь я вижу, где конвертер ищет библиотеку, а ее –

 Смежные вопросы

  • Нет связанных вопросов^_^