Compiling

如何為一個使用者安裝自定義 GMP 庫?

  • February 24, 2016

我正在一個系統上進行一些繁重的數字運算,我想為啟動數字運算計算的使用者編譯(和微調)自定義 GMP 6.1.0。以前我有一個 Debian wheezy (7.6) 系統,我在該系統上安裝了一個自定義的 GMP 庫,同時是 root 並在文件系統中左右修改東西(因為我不知道更好)。它最終奏效了:我的自定義 GMP 庫處理數字的速度比庫存 GMP 快 15%。

現在我在那台電腦上安裝了一個新的 Debian (Jessie 8.3),帶有“庫存”GMP(Debian Jessie 附帶的那個):

# gcc --version
gcc (Debian 4.9.2-10) 4.9.2

# apt-get install libgmp10
# apt-get install libgmp-dev

這顯然是 GMP 6.0.0。

我正在編譯我的數字運算程序:

$ gcc crunch.c -o crunch.o -L/gmp_install/lib -lgmp

(我知道我可能會通過弄亂傳遞給 GCC 的一些參數來獲得一些,但這裡的大問題是非自定義 GMP 的“緩慢”)。

然後我呼叫*./crunch.o*並且它可以工作,但它比我在舊系統上的自定義建構 GMP 慢 15%(使用上面粘貼在完全相同的電腦上的完全相同的 gcc 編譯命令)。

我現在想再次編譯自定義 GMP 6.1.0,但只有執行繁重計算的使用者才能訪問。

換句話說:我現在想乾淨地安裝一個自定義 GMP,而不是弄亂整個文件系統(以 root 身份)。

但我不明白*-L/gmp_install/lib指的是什麼,也不明白-lgmp*是做什麼的。

我認為我需要做的第一步是:

那麼如何為一個(非 root)使用者帳戶編譯自定義 GMP,然後如何編譯我的 crunch.c 程序?

您可以作為普通使用者使用以下步驟

tar xvjf gmp-6.1.0.tar.bz2
cd gmp-6.1.0
./configure --prefix=${HOME}/gmp/6.1.0
make 
make install

這將在~/gmp/6.1.0. 現在如果你想使用這個版本來編譯軟體或在執行時使用它,你必須設置一些環境變數:

GMP_DIR="${HOME}/gmp/6.1.0"
export LD_LIBRARY_PATH=${GMP_DIR}/lib64:$LD_LIBRARY_PATH
export LIBRARY_PATH=${GMP_DIR}/lib64:$LIBRARY_PATH
export CPATH=${GMP_DIR}/include:$CPATH

您可以在要使用它之前將其放入您的~/.bashrc或單獨的文件source中,或者編寫一個包含二進製文件的包裝腳本。其他人喜歡environment-modules用於此類任務。

-lgmp參數告訴您的連結器連結到共享庫libgmp.so,並意味著在眾所周知的路徑中-L/gmp_install/lib搜尋庫( ./gmp_install/lib``/lib, lib64, /usr/lib, /usr/lib64, ...)

環境變數使用如下:

  • LIBRARY_PATH``-L應提供與開關相同的
  • CPATH為標頭檔提供額外的搜尋路徑
  • LD_LIBRARY_PATH執行時需要

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