解決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, 此檔案儲存已排好序的動態連結庫名字列表.