2012-11-20 58 views
0

我有我自己的程序與Linux(Ubuntu系統)上的插件(動態共享庫)。我的圖書館(插件)使用OpenCV(可能不是那麼重要)。無法加載共享庫:未定義的符號

我的插件位於/ usr/local/lib/mysoft /中。

即使使用庫,我也成功編譯了我的程序,安裝成功,所以一切似乎都OK。

當我運行我的程序時,它會根據一些配置文件加載一堆這些庫。我有幾個加載成功的庫,但無法加載一個庫。當裝載(使用的dlopen()打開庫)它給我的錯誤:

/usr/local/lib/mysoft/libMyPlugin2.so: undefined symbol: _ZN2cv6resizeERKNS_11_InputArrayERKNS_12_OutputArrayENS_5Size_IiEEddi 
Segmentation fault (core dumped) 
Tue Nov 20 19:11:29 CET 2012 

它顯然有一些問題,找到CV ::調整是OpenCV中的一部分,但我不明白爲什麼。

我查了以下幾件事:

  • OpenCV的可能是正確安裝,因爲其他庫使用它,以及和沒有問題加載
  • 沒有我的程序的依賴關係,libMyPlugin2.so或OpenCV的缺失(檢查與LDD)
  • 所有庫和二進制文件的架構似乎是相同的(我檢查與objdump的-f)

沒有任何人有一個想法是什麼我做錯了嗎?

這個職位似乎是那麼重要,但仍然沒有幫助: Linux shared library that uses a shared library undefined symbol

+0

您可能安裝了多個版本的OpenCV,並且在運行時選擇了錯誤的版本。 –

+0

Andrey Kamaev可能是正確的,但在調試模式下嘗試構建OpenCV並使用調試庫運行它。 Ubuntu/Linux發行版上的OpenCV有一些先決條件,只有在調試模式下才能捕獲。 – Kamath

+0

這是正確的,我有多個版本的OpenCV安裝,但我鏈接正確的(用ldd chcecked)。即使在卸載後,現在當我只有一個版本時,它的行爲也是一樣的(我甚至重新構建了我的軟件以確保它與單個vwersion鏈接)。 – bubo

回答

0

好吧,我發現這個問題,希望這可以幫助別人......

的問題 - 我是缺少一個OpenCV的庫編譯時。所以我用「opencv_core opencv_imgproc opencv_highgui」取代了「opencv_core opencv_highgui」,一切正常。

因此,儘管我能夠編譯它,但其中一個依賴關係丟失了 - 我猜OpenCV中的某些內容已經發生變化,導致這些源與舊版OpenCV完美搭配(即使是構建)。

相關問題