Path

/etc/ld.so.conf 不包含 /usr/lib

  • October 10, 2014

pkg-config用來在 c++ 編譯期間幫助提供正確的庫。據我了解,它在由/etc/ld.so.conf. 我ld.so.conf通過指向以下的包含指令引用了以下庫位置/etc/ld.so.conf.d/*.conf

/usr/local/lib
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu

問題是我需要的庫/usr/lib預設情況下。

我可以在這條路徑中添加/etc/ld.so.conf自己或移動庫還是推薦的做法是什麼?

pkg-config 根本不使用 ld.so.conf,它通常將配置文件儲存在/usr/lib/pkgconfig/, (如果需要,請指定 PKG_CONFIG 變數)

IE/usr/lib/pkgconfig/libmtp.pc

# libmtp pkg-config source file

prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

Name: libmtp
Description: libmtp is a library for accessing Media Transfer Protocol devices
Version: 1.1.5
Requires: libusb-1.0
Conflicts:
Libs: -L${libdir} -lmtp
Libs.private: -lgcrypt 
Cflags: -I${includedir} 

您可以在那裡找到 cflags、libs 等,這就是 pkg-config 提供所需命令參數的方式。

所以,對於你自己的庫,創建一個類似的文件(在這裡閱讀文件

為了澄清/etc/ld.so.conf:此文件由動態(執行時)連結器/載入器(ld-linux.so在 Linux 上)使用,它解析載入以執行的二進製文件中的符號(這也包括共享庫)。這與連結器形成對比,連結器ld用於將多個對象/歸檔文件組合在一起並解決它們的依賴關係。

動態連結器/etc/ld.so.conf在載入二進製文件時檢查應在其中查找共享庫的列表目錄。除了那裡提到的路徑之外,連結器還搜尋其預設路徑(在 Linux 上/lib/usr/lib通常更改lib64為 64 位載入器),除非二進製文件連結到一個明確禁用此功能的標誌(-x nodefaultlib在 binutils’ 中ld),在這種情況下它只有榮譽ld.so.conf

引用自:https://unix.stackexchange.com/questions/69030