酷!學園
技術討論區 => Linux 討論版 => 主題作者是: ryan 於 2012-09-07 10:34
-
小弟目前用linux當主機,用php寫網站,因為一個功能是pdf 轉jpg,所以裝了ImageMagick,不過下了convert xxx.pdf xxx.jpg 的指令後會出現這樣的錯誤訊息:convert: no decode delegate for this image format ,google搜尋過相關的解決方式是說先移除ImageMagick,再灌libjpeg 和 libjpeg-devel 兩個套件,再重灌ImageMagick ,但我試過後還是不行...
我用rpm -qa |grep ImageMagick 和yum list installed |grep ImageMagick
看ImageMagick 都是
ImageMagick-6.5.4.7-6.el6_2.x86_64
ImageMagick-devel-6.5.4.7-6.el6_2.x86_64
但我用convert -version 出現的版本卻不一樣
Version: ImageMagick 6.7.9-2 2012-08-30 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2012 ImageMagick Studio LLC
Features: OpenMP
有人知道怎麼解決嗎? 拜託了!!
-
rpm -e libjpecXXX libjpeg-develXXX --nodeps
wget XXXXX/libjpeg-6b.tar.gz
tar -xzvf libjpeg
cd libjpeg
./configure --help
指定 INCLUDE 及 LIB 的路徑到 你的 LINUX 的預設路徑.
./configure (指定 INCLUDE LIB 參數)
make
make install
Try Again~~~
-
或是
yum install libjpeg libjpeg-devel
yum install ImageMagick
#
如果還是不行....
ImageMagick 全部重新編譯看看.
-
FIEND大大,想請問一下,你說的下面兩個要怎麼設
指定 INCLUDE 及 LIB 的路徑到 你的 LINUX 的預設路徑.
./configure (指定 INCLUDE LIB 參數)
這邊我不太了解
可否大大再幫我解答一下
感謝!!
-
./configure --help <<<
-
你好像不會編譯 , 對 linux 的整個架構也不清礎 教你別招 ....
1. 先檢查你的 LIB JPEG 的 元件 相依性.
[root@FIEND wge]# ldd /usr/lib64/ImageMagick-6.5.4/modules-Q16/coders/jpeg.so
linux-vdso.so.1 => (0x00007fff94bff000)
libMagickCore.so.2 => /usr/lib64/libMagickCore.so.2 (0x00002b07b144b000)
liblcms.so.1 => /usr/lib64/liblcms.so.1 (0x00002b07b1883000)
libtiff.so.3 => /usr/lib64/libtiff.so.3 (0x00002b07b1abd000)
libfreetype.so.6 => /usr/lib64/libfreetype.so.6 (0x00002b07b1d21000)
libfontconfig.so.1 => /usr/lib64/libfontconfig.so.1 (0x00002b07b1fbe000)
libXext.so.6 => /usr/lib64/libXext.so.6 (0x00002b07b21f5000)
libSM.so.6 => /usr/lib64/libSM.so.6 (0x00002b07b2407000)
libICE.so.6 => /usr/lib64/libICE.so.6 (0x00002b07b260f000)
libX11.so.6 => /usr/lib64/libX11.so.6 (0x00002b07b282c000)
libXt.so.6 => /usr/lib64/libXt.so.6 (0x00002b07b2b6b000)
libbz2.so.1 => /lib64/libbz2.so.1 (0x00002b07b2dd0000)
libz.so.1 => /lib64/libz.so.1 (0x00002b07b2fe2000)
libm.so.6 => /lib64/libm.so.6 (0x00002b07b31f8000)
libgomp.so.1 => /usr/lib64/libgomp.so.1 (0x00002b07b347c000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00002b07b368a000)
libltdl.so.7 => /usr/lib64/libltdl.so.7 (0x00002b07b38a7000)
libjpeg.so.62 => /usr/lib64/libjpeg.so.62 (0x00002b07b3ab0000)
libc.so.6 => /lib64/libc.so.6 (0x00002b07b3cd5000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00002b07b4067000)
libexpat.so.1 => /lib64/libexpat.so.1 (0x00002b07b427e000)
libuuid.so.1 => /lib64/libuuid.so.1 (0x00002b07b44a6000)
libxcb.so.1 => /usr/lib64/libxcb.so.1 (0x00002b07b46aa000)
libdl.so.2 => /lib64/libdl.so.2 (0x00002b07b48c6000)
librt.so.1 => /lib64/librt.so.1 (0x00002b07b4aca000)
/lib64/ld-linux-x86-64.so.2 (0x000000342b200000)
libXau.so.6 => /usr/lib64/libXau.so.6 (0x00002b07b4cd3000)
2.
libjpeg.so.62 => /usr/lib64/libjpeg.so.62 (0x00002ab432b97000) <<< 檢查這一行的狀態.
如果都有連結表示 JPEG 正常被使用 , 表示你的問題跟 JPEG 無關.
3.
如果發現有問題.
yum install libjpeg libjpeg-devel
updatedb
locate libjpeg.so <<<< 找出來在你硬碟那裡. 名稱有可能不是 libjpeg.so.62 .
然後把
libjpeg.so 丟到 /usr/lib64/libjpeg.so.62 <<< 這裡必需跟 LDD 指定的路徑還有檔案名稱一樣.
執行
ldconfig <<< 命令作業系統重新把 元件表讀進去.
再試一次
convert .
如果這樣還有問題....那就全部重新編譯吧~~~
-
正常來說你的 lib 應該長這樣 :
root@FIEND wge_server]# ls -al /usr/lib64/libjpeg.so*
lrwxrwxrwx. 1 root root 17 Sep 7 12:26 /usr/lib64/libjpeg.so -> libjpeg.so.62.0.0
lrwxrwxrwx. 1 root root 17 Jul 28 01:04 /usr/lib64/libjpeg.so.62 -> libjpeg.so.62.0.0
-rwxr-xr-x. 1 root root 149808 Aug 21 2010 /usr/lib64/libjpeg.so.62.0.0
ldd 的資訊應該長這樣.
libjpeg.so.62 => /usr/lib64/libjpeg.so.62 (0x00002b07b3ab0000)
然後...
不用重新 RPM 再重裝一次 ImageMagick
@@" 重新安裝一次 ImageMagick , 其實是要它去觸發 ldconfig 的動作....
下 ldconfig <<<
再檢查一次
[root@FIEND wge]# ldd /usr/lib64/ImageMagick-6.5.4/modules-Q16/coders/jpeg.so
就可以了.
-
如果還是不行....
有可能是你的 libjpeg 不是這個版號 :
1.
rpm -e libjpeg-6b-46.el6.x86_64 libjpeg-devel-6b-46.el6.x86_64 --nodeps
2.
libjpeg-6b
去下載 libjpeg-6bXXX.tar.gz
解開它後.
[root@FIEND jpeg-6b]# ./configure --help
3.
./configure --prefix=/usr
make
make install
4. updatedb
5. locate libjpeg.so
6.
做成這樣:
root@FIEND wge_server]# ls -al /usr/lib64/libjpeg.so*
lrwxrwxrwx. 1 root root 17 Sep 7 12:26 /usr/lib64/libjpeg.so -> libjpeg.so.62.0.0
lrwxrwxrwx. 1 root root 17 Jul 28 01:04 /usr/lib64/libjpeg.so.62 -> libjpeg.so.62.0.0
-rwxr-xr-x. 1 root root 149808 Aug 21 2010 /usr/lib64/libjpeg.so.62.0.0
7. ldconfig
8.
[root@FIEND wge]# ldd /usr/lib64/ImageMagick-6.5.4/modules-Q16/coders/jpeg.so
linux-vdso.so.1 => (0x00007fff94bff000)
libMagickCore.so.2 => /usr/lib64/libMagickCore.so.2 (0x00002b07b144b000)
liblcms.so.1 => /usr/lib64/liblcms.so.1 (0x00002b07b1883000)
libtiff.so.3 => /usr/lib64/libtiff.so.3 (0x00002b07b1abd000)
libfreetype.so.6 => /usr/lib64/libfreetype.so.6 (0x00002b07b1d21000)
libfontconfig.so.1 => /usr/lib64/libfontconfig.so.1 (0x00002b07b1fbe000)
libXext.so.6 => /usr/lib64/libXext.so.6 (0x00002b07b21f5000)
libSM.so.6 => /usr/lib64/libSM.so.6 (0x00002b07b2407000)
libICE.so.6 => /usr/lib64/libICE.so.6 (0x00002b07b260f000)
libX11.so.6 => /usr/lib64/libX11.so.6 (0x00002b07b282c000)
libXt.so.6 => /usr/lib64/libXt.so.6 (0x00002b07b2b6b000)
libbz2.so.1 => /lib64/libbz2.so.1 (0x00002b07b2dd0000)
libz.so.1 => /lib64/libz.so.1 (0x00002b07b2fe2000)
libm.so.6 => /lib64/libm.so.6 (0x00002b07b31f8000)
libgomp.so.1 => /usr/lib64/libgomp.so.1 (0x00002b07b347c000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00002b07b368a000)
libltdl.so.7 => /usr/lib64/libltdl.so.7 (0x00002b07b38a7000)
libjpeg.so.62 => /usr/lib64/libjpeg.so.62 (0x00002b07b3ab0000)
libc.so.6 => /lib64/libc.so.6 (0x00002b07b3cd5000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00002b07b4067000)
libexpat.so.1 => /lib64/libexpat.so.1 (0x00002b07b427e000)
libuuid.so.1 => /lib64/libuuid.so.1 (0x00002b07b44a6000)
libxcb.so.1 => /usr/lib64/libxcb.so.1 (0x00002b07b46aa000)
libdl.so.2 => /lib64/libdl.so.2 (0x00002b07b48c6000)
librt.so.1 => /lib64/librt.so.1 (0x00002b07b4aca000)
/lib64/ld-linux-x86-64.so.2 (0x000000342b200000)
libXau.so.6 => /usr/lib64/libXau.so.6 (0x00002b07b4cd3000)
-
FIEND大大
我下指令ls -al /usr/lib64/libjpeg.so* 結果如下
lrwxrwxrwx. 1 root root 17 2012-08-30 12:15 /usr/lib64/libjpeg.so -> libjpeg.so.62.0.0
lrwxrwxrwx. 1 root root 17 2012-04-27 22:16 /usr/lib64/libjpeg.so.62 -> libjpeg.so.62.0.0
-rwxr-xr-x. 1 root root 149808 2010-08-21 21:23 /usr/lib64/libjpeg.so.62.0.0
跟你說的是一樣的 所以我的libjpeg應該是沒有問題對吧
不過我下convert -version 看到的版本是
ImageMagick 6.7.9-2
和rpm -qa |grep ImageMagick 看到的版本是
ImageMagick-6.5.4.7-6.el6_2.x86_64
兩個不一樣會不會是問題所在??
因為我用另一台可以convert的server
用convert -version和rpm -qa |grep ImageMagick 看到的版本是一樣的
我不知道我為什麼用yum install ImageMagick 後在convert -version
看到的版本是ImageMagick 6.7.9-2
安裝的過程顯示是版本明明是6.5.4.7-6.el6_2
再麻煩FIEND大大了 謝謝
-
我這樣看怎麼覺得問題被搞複雜了???
看起來無非就是系統同時裝過ImageMagick官方釋出的版本,以及CentOS自己打包的版本
不管是用rpm -e 還是yum remove等等,我想就是先把ImageMagick清到從系統裡完全消失為止
然後再重裝
-
我已經用yum remove 把ImageMagick、libjpeg、libjpeg-devel
這三樣都移重灌了
重灌後的版本還是不一致也不能convert...
-
我會建議先弄個虛擬主機來安裝,至少先在 vm 裡測試
確定系統與套件版本,如果各套件相依性太高
無法用 rpm 安裝,就改抓原始碼來自己重編....
-
跟著下面的指令做一次 , 把結果跟我說 :
[root@FIEND cpp]# locate convert | grep bin
/home/cpp/boost_1_51_0/bin.v2/libs/locale/build/gcc-4.4.6/release/link-static/threading-multi/posix/converter.o
/home/cpp/boost_1_51_0/bin.v2/libs/locale/build/gcc-4.4.6/release/link-static/threading-multi/std/converter.o
/home/cpp/boost_1_51_0/bin.v2/libs/locale/build/gcc-4.4.6/release/link-static/threading-multi/util/codecvt_converter.o
/home/cpp/boost_1_51_0/bin.v2/libs/locale/build/gcc-4.4.6/release/threading-multi/posix/converter.o
/home/cpp/boost_1_51_0/bin.v2/libs/locale/build/gcc-4.4.6/release/threading-multi/std/converter.o
/home/cpp/boost_1_51_0/bin.v2/libs/locale/build/gcc-4.4.6/release/threading-multi/util/codecvt_converter.o
/home/cpp/boost_1_51_0/bin.v2/libs/program_options/build/gcc-4.4.6/release/link-static/threading-multi/convert.o
/home/cpp/boost_1_51_0/bin.v2/libs/program_options/build/gcc-4.4.6/release/threading-multi/convert.o
/home/cpp/boost_1_51_0/bin.v2/libs/python/build/gcc-4.4.6/release/link-static/threading-multi/converter
/home/cpp/boost_1_51_0/bin.v2/libs/python/build/gcc-4.4.6/release/threading-multi/converter
/sbin/lvconvert
/sbin/vgconvert
/usr/bin/convert
/usr/bin/mysql_convert_table_format
/usr/bin/rsvg-convert
/usr/bin/sndfile-convert
/usr/sbin/convertquota
[root@FIEND cpp]# rpm -qa | grep ImageMagick
ImageMagick-6.5.4.7-6.el6_2.x86_64
ImageMagick-devel-6.5.4.7-6.el6_2.x86_64
[root@FIEND cpp]# convert -version
Version: ImageMagick 6.5.4-7 2012-05-07 Q16 OpenMP http://www.imagemagick.org
Copyright: Copyright (C) 1999-2009 ImageMagick Studio LLC
[root@FIEND cpp]# ldd /usr/bin/convert
linux-vdso.so.1 => (0x00007fff8f29a000)
libMagickCore.so.2 => /usr/lib64/libMagickCore.so.2 (0x0000003b30000000)
libMagickWand.so.2 => /usr/lib64/libMagickWand.so.2 (0x0000003b2f400000)
liblcms.so.1 => /usr/lib64/liblcms.so.1 (0x000000342ce00000)
libtiff.so.3 => /usr/lib64/libtiff.so.3 (0x0000003b2f000000)
libfreetype.so.6 => /usr/lib64/libfreetype.so.6 (0x0000003724c00000)
libjpeg.so.62 => /usr/lib64/libjpeg.so.62 (0x0000003b2ec00000)
libfontconfig.so.1 => /usr/lib64/libfontconfig.so.1 (0x0000003725000000)
libXext.so.6 => /usr/lib64/libXext.so.6 (0x0000003434e00000)
libXt.so.6 => /usr/lib64/libXt.so.6 (0x0000003b2fc00000)
libbz2.so.1 => /lib64/libbz2.so.1 (0x000000342de00000)
libz.so.1 => /lib64/libz.so.1 (0x000000342c200000)
libgomp.so.1 => /usr/lib64/libgomp.so.1 (0x0000003b2f800000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x000000342be00000)
libltdl.so.7 => /usr/lib64/libltdl.so.7 (0x0000003e97800000)
libSM.so.6 => /usr/lib64/libSM.so.6 (0x000000372ae00000)
libICE.so.6 => /usr/lib64/libICE.so.6 (0x0000003437600000)
libX11.so.6 => /usr/lib64/libX11.so.6 (0x0000003431200000)
libm.so.6 => /lib64/libm.so.6 (0x000000342c600000)
libc.so.6 => /lib64/libc.so.6 (0x000000342b600000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x000000342ea00000)
libexpat.so.1 => /lib64/libexpat.so.1 (0x0000003729000000)
librt.so.1 => /lib64/librt.so.1 (0x000000342ca00000)
/lib64/ld-linux-x86-64.so.2 (0x000000342b200000)
libdl.so.2 => /lib64/libdl.so.2 (0x000000342ba00000)
libuuid.so.1 => /lib64/libuuid.so.1 (0x0000003729400000)
libxcb.so.1 => /usr/lib64/libxcb.so.1 (0x0000003431a00000)
libXau.so.6 => /usr/lib64/libXau.so.6 (0x0000003430a00000)
[root@FIEND cpp]# ldd /usr/lib64/libjpeg.so.62
linux-vdso.so.1 => (0x00007fff1cdff000)
libc.so.6 => /lib64/libc.so.6 (0x000000342b600000)
/lib64/ld-linux-x86-64.so.2 (0x000000342b200000)
-
我已經用yum remove 把ImageMagick、libjpeg、libjpeg-devel
這三樣都移重灌了
重灌後的版本還是不一致也不能convert...
我這裡只能把可能發的狀況和解法告訴你 , 如果還是不能解決.
你先練習全部重新編譯.
這樣子我也看不出什麼問題.
全部重新編譯的過程中你會發現的問題比較細.
其實這問題對熟 LINUX 編譯的人來說不是什麼問題.
因為天天都在串元件的相依性.
如果你有興趣可以多研究一下 LINUX 的 核心和元件的編譯.
這種問題就不是問題了.
-
如果你下的
[root@FIEND cpp]# locate convert | grep bin
/home/cpp/boost_1_51_0/bin.v2/libs/locale/build/gcc-4.4.6/release/link-static/threading-multi/posix/converter.o
/home/cpp/boost_1_51_0/bin.v2/libs/locale/build/gcc-4.4.6/release/link-static/threading-multi/std/converter.o
/home/cpp/boost_1_51_0/bin.v2/libs/locale/build/gcc-4.4.6/release/link-static/threading-multi/util/codecvt_converter.o
/home/cpp/boost_1_51_0/bin.v2/libs/locale/build/gcc-4.4.6/release/threading-multi/posix/converter.o
/home/cpp/boost_1_51_0/bin.v2/libs/locale/build/gcc-4.4.6/release/threading-multi/std/converter.o
/home/cpp/boost_1_51_0/bin.v2/libs/locale/build/gcc-4.4.6/release/threading-multi/util/codecvt_converter.o
/home/cpp/boost_1_51_0/bin.v2/libs/program_options/build/gcc-4.4.6/release/link-static/threading-multi/convert.o
/home/cpp/boost_1_51_0/bin.v2/libs/program_options/build/gcc-4.4.6/release/threading-multi/convert.o
/home/cpp/boost_1_51_0/bin.v2/libs/python/build/gcc-4.4.6/release/link-static/threading-multi/converter
/home/cpp/boost_1_51_0/bin.v2/libs/python/build/gcc-4.4.6/release/threading-multi/converter
/sbin/lvconvert
/sbin/vgconvert
/usr/bin/convert <<< 出現二支 convert , 二支都試看看. covnert -version
/usr/bin/mysql_convert_table_format
/usr/bin/rsvg-convert
/usr/bin/sndfile-convert
/usr/sbin/convertquota
-
如果你檢查元件都有相依.
LINK 都是對的.
那麼還有可能是 程式邏輯錯誤.
不是每個 RPM 都沒問題的.
通常這種問題我都會自己去 TRACE CODE 和找出BUG.
如果再不行 ,
1. 作業系統版本
2. 你的 PDF
3. 你的 RPM 版本.
一次全丟出來 , 我有空替你看一下.
-
原本的convert應該不是樓主自己裝的吧? ( 所以才會覺得怎麼版本會不一致)
應該是同時裝了rpm的版本+ 自己編的版本。 (所以你的convert 應該不只一支)
樓主可以先which convert,看看你直接key convert時,執行的是那個路徑的convert。
-
感謝FIEND大大和其他大大的熱情解答
抱歉過了這麼久才回覆
小弟已經把Server整個重灌linux
重灌後問題就解決了...