報錯信息是編譯用的1.2.56,而運行的時候用的1.5.13.
這個報錯說明服務器上安裝了2個版本的libpng,我們只需更改下運行時候的環境,使用 ldd 可執行c程序,比如說我的是aa
[root@webser1 aa]# ldd aa
linux-vdso.so.1 => (0x00007fffae7f3000)
libpng15.so.15 => /lib64/libpng15.so.15 (0x00007f70d506b000)
libnetcdf.so.7 => /lib64/libnetcdf.so.7 (0x00007f70d1c7a000)
librabbitmq.so.4 => /usr/local/lib/librabbitmq.so.4 (0x00007f70d1a67000)
libm.so.6 => /lib64/libm.so.6 (0x00007f70d1765000)
libcurl.so.4 => /usr/local/lib/libcurl.so.4 (0x00007f70d1510000)
libc.so.6 => /lib64/libc.so.6 (0x00007f70d1142000)
libz.so.1 => /usr/local/lib/libz.so.1 (0x00007f70d0f27000)
libhdf5_hl.so.8 => /lib64/libhdf5_hl.so.8 (0x00007f70d0cf3000)
libhdf5.so.8 => /lib64/libhdf5.so.8 (0x00007f70d06fb000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f70d04f7000)
libjpeg.so.62 => /lib64/libjpeg.so.62 (0x00007f70d02a2000)
/lib64/ld-linux-x86-64.so.2 (0x00007f70d52ad000)
libsz.so.2 => /lib64/libsz.so.2 (0x00007f70d009e000)
libaec.so.0 => /lib64/libaec.so.0 (0x00007f70cfe96000)
通過ldd 指令,可以看到libpng15.so.15連接到了/lib/ibpng15.so.15上,查看
[root@webser1 aa]# ll /lib64/libpng*
lrwxrwxrwx. 1 root root 19 Jan 17 20:22 /lib64/libpng15.so -> libpng15.so.15.13.0
lrwxrwxrwx. 1 root root 19 Jan 16 16:16 /lib64/libpng15.so.15 -> libpng15.so.15.13.0
-rwxr-xr-x. 1 root root 179296 Dec 10 2015 /lib64/libpng15.so.15.13.0
lrwxrwxrwx. 1 root root 11 Jan 17 20:22 /lib64/libpng.so -> libpng15.so
再第二行找到了libpng15.so.15,但發現其鏈接到了libpng15.so.15.13.0,再第三行發現了libpng15.so.15.13.0,在這裏我們刻把libpng15.so.15,指向到我們的需要的libpng12上。
1、備份libpng15.so.15.13.0
mv /lib64/libpng15.so.15.13.0 /lib64/libpng15.so.15.13.0.bak
2、查找需要的libpng12所在的位置
[root@webser1 aa]# whereis libpng
libpng: /usr/lib64/libpng15.so /usr/lib64/libpng.so /usr/local/lib/libpng.la /usr/local/lib/libpng.so /usr/local/lib/libpng12.a /usr/local/lib/libpng12.la /usr/local/lib/libpng12.so /usr/local/lib/libpng.a /usr/share/man/man3/libpng.3.gz
在其中找到:/usr/local/lib/libpng12.so 的位置
將libpng15.so.15.13.0 指向到 /usr/local/lib/libpng12.so
[root@webser1 aa]# mv /lib64/libpng15.so.15.13.0 /lib64/libpng15.so.15.13.0.bak
[root@webser1 aa]# ln -s /lib64/libpng15.so.15.13.0 /usr/local/lib/libpng12.so
執行完畢可以看到:
[root@webser1 aa]# ll /lib64/libpng*
lrwxrwxrwx. 1 root root 19 Jan 18 10:35 /lib64/libpng12.so.0 -> libpng15.so.15.13.0
lrwxrwxrwx. 1 root root 19 Jan 17 20:22 /lib64/libpng15.so -> libpng15.so.15.13.0
lrwxrwxrwx. 1 root root 23 Jan 18 10:35 /lib64/libpng15.so.15 -> libpng15.so.15.13.0.bak
lrwxrwxrwx. 1 root root 26 Jan 18 10:35 /lib64/libpng15.so.15.13.0 -> /usr/local/lib/libpng12.so
-rwxr-xr-x. 1 root root 179296 Dec 10 2015 /lib64/libpng15.so.15.13.0.bak
lrwxrwxrwx. 1 root root 11 Jan 17 20:22 /lib64/libpng.so -> libpng15.so
至此,問題解決。