解決error while loading shared libraries: libXXX.so.X: cannot open shared object file: No such file


一、問題

執行hello程式時,用到了自己編寫的動態庫,在目錄/usr/local/lib目錄下,執行時出現

error while loading shared libraries: libhello.so.1: cannot open shared object file: No such file or directory 

分析原因:連結器ld提示找不到庫檔案。ld預設的目錄是/lib和/usr/lib,如果放在其他路徑也可以,需要讓ld知道庫檔案所在的路徑。找不到這個動態庫,CMakeLists.txt是這樣寫的:

cmake_minimum_required(VERSION 3.0)
INCLUDE_DIRECTORIES(/usr/local/include/hello)
LINK_directories("/usr/locla/lib")
ADD_EXECUTABLE(main main.c)
TARGET_LINK_LIBRARIES(main libhello.so)

這裡已經指定了,可是還出現上面問題,根據錯誤提示找到部落格:https://blog.csdn.net/yjk13703623757/article/details/53217377

解決方法如下:

方法1:

# vim /etc/ld.so.conf //在新的一行中加入庫檔案所在目錄 /usr/lib # ldconfig //更新/etc/ld.so.cache檔案

方法2:

1.將使用者用到的庫統一放到一個目錄,如 /usr/loca/lib # cp libXXX.so.X /usr/loca/lib/  2.向庫配置檔案中,寫入庫檔案所在目錄 # vim /etc/ld.so.conf.d/usr-libs.conf  /usr/local/lib

3.更新/etc/ld.so.cache檔案 # ldconfig 

 附加:

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

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

01-06 11:47