2011-04-04 60 views
7

我有一個應用程序依賴於過多的庫(我們不是全部)。大多數這些庫都是通過軟件包管理器安裝的。對於那些沒有,我已經重新編譯它們,但我仍然得到相同的libpng不兼容性錯誤。libpng警告:應用程序和庫中的libpng版本不兼容

libpng warning: Application was compiled with png.h from libpng-1.2.44 
libpng warning: Application is running with png.c from libpng-1.4.3 

這是一個錯誤,因爲生成的緩衝區爲空。我如何知道哪個庫鏈接到了新庫,哪個庫鏈接到了舊庫?

ldd <executable-name> 

... 
libpng12.so.0 => /lib/x86_64-linux-gnu/libpng12.so.0 (0x00007f5a0660f000) 
... 

運行locate png.h給我一對夫婦的系統級的文件

/usr/include/png.h 
/usr/include/libpng12/png.h 

所有這一切,都是44年2月1日。

我正在運行Ubuntu 11.04 x86-64。

更新:原來的OpenCV附帶了自己的版本的libpng這是1.4.3

+0

哪個平臺? – 2011-04-04 21:18:48

+2

@Dat Chu - 我正面臨同樣的問題,因爲你發現OpenCV自帶了libpng版本,我應該怎麼做才能正確編譯我的代碼?你遵循以下兩個建議中的哪一個?謝謝你的幫助! – Matteo 2012-02-15 17:32:00

回答

4

它看起來像你的應用程序動態鏈接安裝比您正在使用的頭某處以外的.so庫文件。你可以通過ldd <binary>找出你的二進制文件正在拾取哪個.so,然後從那個目錄(除非它是系統目錄)抓取頭文件而不是你正在使用的頭文件。您可以通過在編譯時更改-I標誌來完成此操作。否則,我認爲您需要安裝libpng-1.4.3,以便您可以根據其標題進行編譯。

0

正如你的問題所指出的那樣,OpenCV 並不帶自帶的libpng版本,但你可以選擇使用系統上安裝的libpng版本。您只能在從源代碼構建OpenCV時執行此操作:在運行cmake時禁用BUILD_PNG。

1

馬克B已經解釋了它。 現在爭取Matteo

你的鏈接器挑選libpng的第一次出現。這似乎是在OpenCV中嵌套 。看看你的Makefile,並把你的本地版本之前的 包含在OpenCV中。在我的情況:

-I/usr/include目錄/填實:libpng12 -lpng12 [...] -L在/ usr/local/lib目錄-lopencv_core