在主目錄本機安裝庫,但程式無法辨識它

在主目錄本機安裝庫,但程式無法辨識它

我正在以非 root 使用者身分在伺服器上安裝程式。具體來說,它是 tmux 1.5,但在我看來,這應該廣泛適用於所有本地安裝的程式(我提到程式名稱,以防這個問題最終不是我自己的錯誤)。

程式要求我安裝一些依賴函式庫(例如libevent和ncurses)。所以,我在本地安裝了它們,因為我沒有 root 存取權限

cd $HOME/library/installation/folder
DIR=$HOME/local
./configure --prefix=$DIR 
#... make ... make install 

現在,要安裝該程序,我還必須包含庫包:

cd $HOME/program/installation/folder
./configure --prefix=$DIR CFLAGS="-I$DIR/include" LDFLAGS="-L$DIR/lib"
#... make ... make install 

好的,這樣就可以毫無問題地將程式安裝到 $HOME/local/bin 中,但是如果我執行可執行檔: $HOME/local/bin/tmux ,則會出現以下錯誤:

tmux:載入共用程式庫時發生錯誤:libevent-2.0.so.5:無法開啟共用物件檔案:沒有這樣的檔案或目錄

在我看來,程式找不到所需的庫,但檔案 libevent-2.0.so.5 確實存在於配置選項中指定的 $HOME/local/lib 中。我想知道如何讓程式識別已安裝的庫以便運行。我嘗試將符號連結放入 $HOME/lib、$HOME/bin 和 $HOME/local/bin 中,但這些都不起作用。任何想法和建議將不勝感激

答案1

嘗試使用重建 libevent

./configure --disable-shared

我懷疑這會解決您的問題,因為在構建二進製文件時將鏈接該庫,並且不需要在運行時搜索。

或者,如果您需要動態連結的 libevent,可以將 libevent-2.0.so.5 的包含目錄新增至 LD_LIBRARY_PATH 環境變數:

export LD_LIBRARY_PATH=${HOME}/local/lib/:${LD_LIBRARY_PATH}

答案2

您也可以設定 RPATH,其中將庫搜尋補丁編碼到二進位檔案本身中

只需添加-R $DIR/libCFLAGS.

答案3

我問了類似的問題,有趣的是關於tmux所有東西的構建,儘管我仍然確信這不應該適用於 GNUconfigure和GNUmake一起使用的任何情況。

我相信更乾淨的方法是利用所謂的“rpath” - 嵌入在二進位檔案中的庫搜尋路徑。-rpath至少 GNU 連結器的開關允許ld指定“rpath”。

建置命令列將如下所示:

PKG_CONFIG_PATH=/path/to/libevent/lib/pkg-config LDFLAGS=-Wl,-rpath,/path/to/libevent/lib ./configure ...

這裡並不是最重要的,但PKG_CONFIG_PATH上面只是推薦的方法來完成人們手動發送-L/path/to/libevent/lib -I/path/to/libevent/include./configure腳本的任務。當您建置 時libevent,它會安裝自己的設定檔pkg-config(由./configure)使用。你應該使用它,因為只有libevent 確實知道建造時應該使用哪些開關。

無論如何,在某些情況下,-rpath這是解決問題的更乾淨的方法。

LD_LIBRARY_PATH然而,基於 -的解決方案允許您在運行時處理已建置的二進位檔案所使用的庫,這有時是可取的。但是,如果您只想針對某個特定的庫進行構建,您已將其放在主資料夾中的某個專用位置,那麼我認為-rpath基於 - 的解決方案將被視為規範的答案。

奇怪的是為什麼tmux'自己的建置腳本在建置過程中不會從庫搜尋路徑推斷出此路徑。也許他們不需要也不應該,我不知道。這發生在我們建造者身上是巧合嗎tmux

答案4

其他人沒有運氣,但這對我有用,從這裡:

sudo ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.5

相關內容