我有一個項目正在使用FreeImage和openCV,目前我們正在使用這兩個jpeg支持(我正在努力解決這個問題,但現在它必須留下來)。無論如何,FreeImage將libjpeg 7.0編譯到它的靜態庫中,而openCV的highgui庫將它作爲共享庫(在我的系統上,Ubuntu 9,我已經安裝了libjpeg 6.2)鏈接它。靜態和共享庫符號衝突?
它們鏈接到一個最終的庫,用於鏈接到各種程序,java包裝等。所有這些工作正常,沒有符號衝突或任何在編譯/鏈接時間。但是,當我使用openCV cvLoadImage函數打開圖像時,它在讀取標題時就會消失,很可能是由於6.2和7.0中的標題之間的差異。
如果我取消FreeImage的鏈接(並註釋掉需要它的代碼),openCV調用會再次開始工作,因此FreeImage的靜態libjpeg符號與libjpeg共享庫中將要加載的符號衝突。我無法弄清楚爲什麼我的編譯器在鏈接過程中不會因爲兩組libjpeg符號而引發錯誤。另外,我試着用7.0版暫時替換我的系統的jpeglib.h頭文件,看看用它編譯的openCV是否會與freeimage帶給表格的符號同步,看起來無濟於事。
最後,我在jpeg_read_header中放置了freeimage編譯的libjpeg中的printf,並重新構建它以查看openCV是否使用freeimage libjpeg定義。它沒有打印出來,所以我不得不假設沒有。
所以我想我的問題是
1)爲什麼不鏈接一個靜態的libjpeg和共享的libjpeg生成鏈接因爲重複的符號錯誤?
2)有誰知道爲什麼這兩件事情彼此衝突?
編輯:在調試模式下編譯openCV,然後在常規模式下似乎再次鬆動並重新工作,不知道發生了什麼。
我的假設是,它正在使用一個或其他庫,但也許它使用了一點兩種?更改openCV編譯的頭文件並沒有解決問題。 – 2010-02-07 17:01:58