我在編譯一個小工程時,編譯過程並沒有報錯,但是在運行報瞭如下錯誤:
undefined symbol N2cv3Mat20updateContinuityFlagEv
。解決此類問題的思路可以從如下幾個方面入手:
- 庫沒有正確連接,但如果是這個問題,我們在編譯時往往就會報錯。
- 庫的版本不對,比如我們使用的第三方庫其依賴的是OpenCV2,但是我們自己的工程使用的時OpenCV3,這時也會有這個問題。
- 最容易讓人忽略的一個情況時,雖然庫的版本都對應上了,但是路徑對應不上。那我的例子來說,我的一個依賴外部庫是
libface_gpu.so
,就是這個庫保存,因此我ldd libface_gpu.so
,發現使用的是/usr/local/lib/libopencv_***.so.3.4
。我自己編譯的小工程的可執行文件demo
,當我ldd demo
時發現../../lib/libopencv_***.so.3.4
.我們發現兩者路徑不一致,因此我們現在要修改我們的makefile文件了,使兩者保持一致即可。