編譯程序時鏈接動態庫so的一些問題

linux下開發程序,我們經常會調用第三方的動態庫,大家可能經常會碰到cannot find lxxx類似的報錯。

這類報錯一般有三個可能。

第一種,電腦上沒有相應的庫,程序在鏈接的時候自然找不到該動態庫。確認是不是這個問題非常簡單,使用find命令搜索一下即可。若沒有,安裝對應的so程序即可。

第二種,電腦上有相應的庫,但是庫所在的目錄不在編譯搜索的目錄內。一般/lib和/usr/lib是編譯時的固定搜索目錄,而一般/usr/local/lib就不是默認的搜索目錄。解決這個問題也非常簡單,一:在makefile中增加編譯搜索目錄,通過-L目錄的方式完成,比如-L/usr/local/lib。二:將so拷貝至系統搜索目錄,但是系統搜索目錄一般都是一些系統的庫,不建議將自己的庫拷貝至該目錄,這樣比較亂。三:添加搜索目錄,在/etc/ld.so.conf.d/目錄下新建一個文件比如說opencv.conf,然後在該文件中加入.so文件的路徑,比如/usr/local/lib 就可以了。第三種方式和第一種方式的差異在於,第一種改變的是當前編譯程序的搜索目錄,而第三種改變的是所有在該系統上編譯程序的搜索目錄。

第三種,電腦上有相應的庫,庫在的目錄也在編譯搜索的目錄內。一般出現這種情況是電腦上只有libxxx.so.xx.xx.xx,而沒有libxxx.so。而系統在搜索的時候一般是搜索的libxxx.so,這樣就會搜索不到該動態庫。解決的方法也很簡單,新建一個軟鏈接即可,新建一個libxxx.so指向電腦上存在的libxxx.so.xx.xx.xx。

一般通過以上三種方法,基本可以解決找不到動態庫的問題。

附:c/c++編譯運行時動態庫搜索路徑:https://blog.csdn.net/wuzhidefeng/article/details/106407250

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章