2008-11-04 34 views
2

我在Fedora Linux機器上工作。Unix問題:自動識別本地安裝的庫的路徑

我有一大堆的二進制文件和庫,我安裝在我的主目錄下。

我想設置我的系統,所以安裝軟件的功能與我的相同,就好像root用戶在沒有前綴的情況下安裝軟件一樣。

我可以運行安裝在〜/ local/bin中的二進制文件,只需將該目錄添加到我的PATH變量中,但是如何鏈接到〜/ local/lib和〜/ local/lib64中的庫?

是否有類似於LD_LIBRARY_PATH變量的東西,但在編譯時而不是運行時找到庫?我不想擔心通過L〜/ local/lib或通過./configure腳本中的標誌將路徑顯式傳遞給編譯器。

回答

1

LIBRARY_PATH環境變量設置爲$HOME/local/lib:$HOME/local/lib64。您還可以設置環境變量C_INCLUDE_PATHCPLUS_INCLUDE_PATH以在$HOME/local/include中查找包含文件。這些是GCC用來查找庫和包含文件的環境變量,因此它們可能不適用於其他編譯器。

+0

您的意思是LD_LIBRARY_PATH? – 2008-11-04 07:20:47

0

除了設置LD_LIBRARY_PATH之外,還可以查看/etc/ld.so.conf(適用於所有用戶,甚至是root用戶)。如果使用/etc/ld.so.conf,請考慮系統的安全性;如果人們從目錄中運行圖書館,他們相信你不要惹他們。

1

有兩種方法來獲取庫在運行時的工作:

  1. 如果圖書館只爲您的使用,並且它不是一個多用戶系統,然後使用$LD_LIBRARY_PATH環境變量

  2. 如果您是系統中唯一的用戶,則可以將您的目錄添加到/etc/ld.so.conf/etc/ld.so.conf.d中的新文本文件中。之後運行ldconfig重建系統的共享庫緩存

在編譯時事情並不那麼清楚。 GNU鏈接器支持-rpath參數和$LD_RUN_PATH環境變量來指定庫路徑。但是,在每種情況下,結果路徑都會以二進制格式硬編碼,因此如果您隨後想要移動文件,則必須重新編譯它們。

我相信使用./configure樣式腳本構建的程序應該能夠找到您的$LD_RUN_PATH中的任何庫,但尚未能夠對其進行測試。

無論是哪種情況,運行./configure --prefix=${HOME}/local應允許configure解析包含目錄和庫。