Я чувствую себя немного виноватым, размещая это здесь, так как он, вероятно, лучше обслуживается на ServerFault или одной из плат Linux, и вопрос длится более 6 месяцев, но я весь день стучал головой о стену и, наконец, нашел решение этой проблемы, и я полагал, что кто-то другой может извлечь выгоду из этого в будущем.
системы: Windows 7
и CentOS 6.5
Использование: Ghostscript 9.14
Немного предыстории:
Как OP я был запуск программы Ghostscript на Windows, чтобы конвертировать PDF-файлы в серии изображений , Это работало нормально, пока мне не пришлось переключиться на Linux и запустить программу, и около 5% PDF-файлов, которые мне нужны для конвертирования, придумали error cannot decode code stream
. Я понял, что использовал более новую версию ghostscript в Windows. (9.14 на Windows по сравнению с 8,70 на CentOS из-за установки через yum).
Я удалил старую версию с yum remove ghostscript
. Затем я нашел самый простой способ установки новейшей версии Ghostscript - загрузить с here и скомпилировать. Поскольку я удалил предыдущую версию ghostscript с помощью yum, мне пришлось обновить ссылку в usr/bin
, чтобы указать на usr/local/bin/gs
с ln -s /usr/local/bin/gs /usr/bin/gs
. Со всем на месте, так что я подумал, я попытался запустить свою программу, а затем bam, error!
Решение проблемы:
Так что теперь я получаю сообщение об ошибке:
Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'gs': libgs.so: cannot open shared object file: No such file or directory
я наткнулся на пост here, который сказал, чтобы получить необходимую libgs.so
мне нужно вернуться назад и перестройте источник как общую библиотеку с помощью команды make so
. Я сделал это, а затем взял файл libgs.so.9.14
под каталогом sobin
в папке ghostscript и скопировал его в /usr/lib
.В этом каталоге я сделал символическую ссылку на libgs.so
, используя команду ln -s /usr/lib/libgs.so.9.14 /usr/lib/libgs.so
.
Как только это было сделано, мне нужно было обновить мой ld_library_path
, но было обнаружено, когда я сделал это, это изменение не было глобальным, поэтому я нашел Unix & Linux post о том, как установить глобальный путь lib. В основном для этого вам нужно добавить файл .conf
в /etc/ld.so.conf.d/
с указанием пути к файлу. Я сделал это с помощью vi /etc/ld.so.conf.d/libgs.conf
и добавил /usr/lib/libgs.so
к файлу. И наконец я побежал ldconfig
, чтобы сохранить изменения.
TLDR:
Download последняя версия Ghostscript от источника: wget http://downloads.ghostscript.com/public/ghostscript-9.14.tar.gz
Распакуйте дегтя: tar -xzf ghostscript-9.14.tar.gz
cd ghostscript-9.14
./configure
make
< - Возможно, вы сможете пропустить и перейти на make so
, я сделал это в этом порядке, поэтому оставлю его так.
make install
make so
Если вы удалили предыдущую версию с нямln -s /usr/local/bin/gs /usr/bin/gs
cp ghostscript-9.14/sobin/libgs.so.9.14 /usr/lib
ln -s /usr/lib/libgs.so.9.14 /usr/lib/libgs.so
vi /etc/ld.so.conf.d/libgs.conf
В новом файле libgs.conf: /usr/lib/libgs.so
и сохранить ЭКУ, :, wq
.
ldconfig
и сделано.
Запустите программу конверсии.
Надеюсь, это помогло и не было слишком запутанным. Я не эксперт по Linux (пока), поэтому я могу выполнять немного больше работы, чем необходимо, с помощью приведенных выше команд, но я хотел быть основательным.
Он должен быть в пакете разработки ghostscript. Точное имя пакета зависит от вашего дистрибутива Linux. libgs-dev на дебианских производных, ghostscript-devel на Fedora и, возможно, что-то еще на других – kiheru