如何仅为一个用户安装自定义 GMP 库?

Ced*_*tin 3 compiling libraries gcc

我正在一个系统上进行一些繁重的数字运算,我想为启动数字运算计算的用户编译(并微调)自定义 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
Run Code Online (Sandbox Code Playgroud)

这显然是 GMP 6.0.0。

我正在编译我的数字运算程序:

$ gcc crunch.c -o crunch.o -L/gmp_install/lib -lgmp
Run Code Online (Sandbox Code Playgroud)

(我知道我可能会通过弄乱传递给 GCC 的一些参数来获得一些收益,但这里的大问题是非自定义 GMP 的“缓慢”)。

然后我调用./crunch.o并且它可以工作,但它比我在旧系统上的自定义构建 GMP 慢 15%(在完全相同的计算机上使用上面粘贴的完全相同的 gcc 编译命令)。

我现在想再次编译自定义 GMP 6.1.0,但只有运行繁重计算的用户才能访问。

换句话说:我现在想干净地安装自定义 GMP,而不是弄乱(在作为 root 用户时)整个文件系统。

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

我认为我需要做的第一步是:

那么如何为一个(非 root)用户帐户编译自定义 GMP,然后我将如何编译我的 crunch.c 程序?

Tho*_*mas 6

您可以作为普通用户使用以下步骤

tar xvjf gmp-6.1.0.tar.bz2
cd gmp-6.1.0
./configure --prefix=${HOME}/gmp/6.1.0
make 
make install
Run Code Online (Sandbox Code Playgroud)

这将在~/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
Run Code Online (Sandbox Code Playgroud)

您可以在要使用它之前将其放入您的~/.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 运行时需要