我有我自己的程序與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
您可能安裝了多個版本的OpenCV,並且在運行時選擇了錯誤的版本。 –
Andrey Kamaev可能是正確的,但在調試模式下嘗試構建OpenCV並使用調試庫運行它。 Ubuntu/Linux發行版上的OpenCV有一些先決條件,只有在調試模式下才能捕獲。 – Kamath
這是正確的,我有多個版本的OpenCV安裝,但我鏈接正確的(用ldd chcecked)。即使在卸載後,現在當我只有一個版本時,它的行爲也是一樣的(我甚至重新構建了我的軟件以確保它與單個vwersion鏈接)。 – bubo