![如果庫有多個版本,系統會使用哪個版本](https://rvso.com/image/134431/%E5%A6%82%E6%9E%9C%E5%BA%AB%E6%9C%89%E5%A4%9A%E5%80%8B%E7%89%88%E6%9C%AC%EF%BC%8C%E7%B3%BB%E7%B5%B1%E6%9C%83%E4%BD%BF%E7%94%A8%E5%93%AA%E5%80%8B%E7%89%88%E6%9C%AC.png)
假設我們已經在 /usr/lib64/libfreetype.so 中安裝了 freetype 函式庫,其版本為 1.4,並且我們在 /usr/local/lib/libfreetype.so 中編譯並安裝了該函式庫的另一個版本。當我們建立需要 freetype 的軟體時,建置系統 (make) 如何知道要使用哪個版本?
答案1
TL;DR 版本:這取決於。
- 作業系統:可能存在作業系統特定環境 (
LD_LIBRARY_PATH
) 設定檔或命令(例如ldconfig(8)
),用於註冊用於搜尋庫的路徑。 - 建置系統:可能有環境變數例如
LDFLAGS
命令列標誌或設定檔設定;當系統(或使用者)在自訂路徑下有 ncurses 時mutt
。--with-curses=[dir]
這些取決於建置系統(甚至是 的風格make
),並且可能需要手動寫入 autoconf 或 cmake 檔案中。 - 建置後配置:諸如
patchelf
(如果可用)之類的工具允許選擇不同的庫或更改搜尋路徑。
答案2
libxxx.so
通常是共享庫文件的符號鏈接,名稱中包含版本。
如果您使用 鏈接,則使用-lxxx
此文件。libxxx.so
如果您想連結到另一個版本,則需要指定庫的完整路徑名。