lib so 鏈結不到

2021-06-25 22:59:07 字數 1284 閱讀 5033

一般我們在linux下執行某些外部程式的時候可能會提示找不到共享庫的錯誤, 比如:

tmux: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: no such file or directory

另外乙個原因就是已經安裝了該共享庫, 但

執行需要呼叫該共享庫的程式的時候, 程式按照預設共享庫路徑找不到該共享庫檔案.

所以安裝共享庫後要注意共享庫路徑設定問題, 如下:

1) 如果共享庫檔案安裝到了/lib或/usr/lib目錄下, 那麼需執行一下ldconfig命令

ldconfig命令的用途, 主要是在預設搜尋目錄(/lib和/usr/lib)以及動態庫配置檔案/etc/ld.so.conf內所列的目錄下, 搜尋出可共享的動態鏈結庫(格式如lib*.so*), 進而建立出動態裝入程式(ld.so)所需的連線和快取檔案. 快取檔案預設為/etc/ld.so.cache, 此檔案儲存已排好序的動態鏈結庫名字列表.

2) 如果共享庫檔案安裝到了/usr/local/lib(很多開源的共享庫都會安裝到該目錄下)或其它"非/lib或/usr/lib"目錄下, 那麼在執行ldconfig命令前, 還要把新共享庫目錄加入到共享庫配置檔案/etc/ld.so.conf中, 如下:

# cat /etc/ld.so.conf

include ld.so.conf.d/*.conf

# echo "/usr/local/lib" >> /etc/ld.so.conf

#ldconfig

3) 如果共享庫檔案安裝到了其它"非/lib或/usr/lib" 目錄下,  但是又不想在/etc/ld.so.conf中加路徑(或者是沒有許可權加路徑). 那可以export乙個全域性變數ld_library_path, 然後執行程式的時候就會去這個目錄中找共享庫.

ld_library_path的意思是告訴loader在哪些目錄中可以找到共享庫. 可以設定多個搜尋目錄, 這些目錄之間用冒號分隔開. 比如安裝了乙個mysql到/usr/local/mysql目錄下, 其中有一大堆庫檔案在/usr/local/mysql/lib下面, 則可以在.bashrc或.bash_profile或shell裡加入以下語句即可:

export ld_library_path=/usr/local/mysql/lib:$ld_library_path   

一般來講這只是一種臨時的解決方案, 在沒有許可權或臨時需要的時候使用.

ubuntu 鏈結找不到鏈結庫的解決方法

home bear qtprogram opencv001 build desktop opencv001 error while loading shared libraries libopencv highgui.so.2.3 cannot open shared object file no ...

linux 鏈結庫找不到的問題

linux中ld查詢庫時,經常遇到問題,記錄一下 如果 extra libs裡面明確寫了這個庫,例如 extra libs lcudart 就一定要把這個庫的路徑加到 extra ldflags中,否則會報找不到。即使這個庫的路徑存在於ld library path中。如果是 extra libs中...

當gcc程式設計找不到鏈結庫

1,有可能是你的庫路徑在 usr local lib目錄下,你需要 nano etc ld.so.conf include etc ld.so.conf.d conf usr local lib或者在makefile裡面gcc rpath來指定庫的路徑 2,檢視可執行檔案或者庫去溯源是誰依賴了找不到...