使用c的libpng庫:Application built with libpng-1.2.56 but running with 1.5.13 錯誤

報錯信息是編譯用的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

 

至此,問題解決。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章