![]() |
此條目特定於 Unix 系統。
在回答問題之前,讓我們回顧一些關於共享函式庫的要點。共享函式庫可以被多個應用程式或其他函式庫使用,而無需將函式庫實際包含在應用程式中,這可以大大減少應用程式的總大小。也可以在應用程式已安裝的情況下升級共享函式庫。
然而,為了讓依賴共享函式庫的應用程式啟動,作業系統可能需要在應用程式啟動時找到共享函式庫。動態連結器會在系統定義的路徑清單中搜尋、載入函式庫並解析符號。這意味著您應該更改由 LD_LIBRARY_PATH
環境變數給出的系統定義清單,或將函式庫安裝到系統位置。這在開發時可能很不方便,因為函式庫尚未準備好安裝,而且使系統路徑變得雜亂可能並非理想之舉。幸運的是,在 Unix 上還有另一種方法。
可執行檔可以包含額外的函式庫路徑清單,這些路徑將在系統路徑之前被搜尋。這對於開發來說非常棒,因為建置系統知道所有函式庫的路徑,並且可以將它們包含在可執行檔中。這是當 hardcode-dll-paths
功能的值為 true
時完成的,這是預設值。當可執行檔應該被安裝時,情況就不同了。
顯然,已安裝的可執行檔不應該包含硬編碼到開發樹的路徑。(install
規則因此明確地停用了 hardcode-dll-paths
功能。)但是,您可以使用 dll-path
功能手動新增明確的路徑。例如:
install installed : application : <dll-path>/usr/lib/snake <location>/usr/bin ;
將允許應用程式找到放置在 /usr/lib/snake
目錄中的函式庫。
如果您將函式庫安裝到非標準位置並新增明確的路徑,則可以更好地控制將使用的函式庫。系統位置中同名的函式庫將不會被無意中使用。如果您將函式庫安裝到系統位置並且不新增任何路徑,則系統管理員將擁有更多控制權。每個函式庫都可以單獨升級,所有應用程式都將使用新的函式庫。
哪種方法最好取決於您的情況。如果函式庫相對獨立,並且可以被第三方應用程式使用,則應該將它們安裝在系統位置。如果您有許多只能由您的應用程式使用的函式庫,則將它們安裝到非標準目錄並新增明確的路徑(如上例所示)是有意義的。另請注意,不同系統的準則在這方面有所不同。例如,Debian GNU 準則禁止任何額外的搜尋路徑,而 Solaris 準則建議始終使用它們。