(2021.08.04)最近为了安装 IBM 的开源项目 HElib C++,需要在服务器上先安装GMP和NTL,NTL需要依赖GMP,所以先来安装一下GMP,记录一下在服务器上安装成功的过程:)

直接安装libgmp二进制文件
sudo apt-get install libgmp-dev

如果选择直接安装编译好的二进制文件,可以跳到看「检查是否安装成功」部分进行测试;如果想要编译安装,就接着往下看~

安装依赖

我的系统是Ubuntu 18.04 LTS,先安装一下GMP库的依赖:

sudo apt-get install m4

下载并解压GMP压缩文件

在GMP的官网1.tar.lz.tar.gz.tar.zst版本的压缩文件,可以下载到本地再上传到服务器,也可以复制链接后直接在服务器上使用 wget/curl 下载(这边以gmp-6.2.1为例):

# 1. 使用 wget 下载 gmp-6.2.1.tar.xz
wget https://gmplib.org/download/gmp/gmp-6.2.1.tar.xz

# 2. 或者使用 curl 下载 gmp-6.2.1.tar.xz
curl https://gmplib.org/download/gmp/gmp-6.2.1.tar.xz --output gmp-6.2.1.tar.xz

然后进行解压 2

# 1. 对gmp-6.2.1.tar.xz进行解压
xz -d gmp-6.2.1.tar.xz && tar xvf gmp-6.2.1.tar

# 2. 对gmp-6.2.1.tar.gz进行解压
tar -zxvf gmp-6.2.1.tar.gz

# 3. 解压zst文件需要先安装zstd包,然后再对gmp-6.2.1.tar.zst进行解压
sudo apt install zstd
tar -I zstd -xvf gmp-6.2.1.tar.zst

然后就可以开始安装了~

编译安装GMP

# 进入gmp目录
cd gmp-6.2.1
# 设置安装路径前缀,建议设置为/usr
./configure --prefix=/usr  --enable-cxx
# 开始编译安装
make
make check
sudo make install

检查是否安装成功

可以先进入 /usr/local/lib/usr/lib 目录查看有没有 libgmp 相关的文件。

cd /usr/local/lib
ls
# 大概会包含下面这些文件,基本上就说明安装成功了
# libgmp.a   libgmp.so.10      libgmpxx.la    libgmpxx.so.4.6.1
# libgmp.la  libgmp.so.10.4.1  libgmpxx.so    libgmpxx.so.4
# libgmp.so  libgmpxx.a

然后再来编译一个简单的测试

# 使用vim编辑器新建并打开一个文件
vim testGMP.cpp

vim打开的空文件中,切换为英文输入法,按i来进入插入模式,粘贴下面的代码,再按esc键退出插入模式,输入:wq然后回车,即可保存并退出。

#include <gmpxx.h>
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
        mpz_t a, b, c;
        mpz_init(a);
        mpz_init(b);
        mpz_init(c);
        printf("========= Input a and b => Output a + b =========\n");
        printf("[-] a = ");
        gmp_scanf("%Zd", a);
        printf("[-] b = ");
        gmp_scanf("%Zd", b);
        mpz_add(c, a, b);
        gmp_printf("[+] c = %Zd\n",c);
        return 0;
}

然后可以通过ls命令看到当前目录下面有testGMP.cpp这个文件,就可以对其进行编译测试了。

# 编译testGMP.cpp
g++ testGMP.cpp -o testGMP -lgmp -lm
# 没有报错的话就说明安装成功~运行即可
./testGMP

根据提示输入大整数ab,到这里就说明测试成功了

========= Input a and b => Output a + b =========
[-] a = 11111111111111111111111111
[-] b = 22222222222222222222222222
[+] c = 33333333333333333333333333

如果这边文章对你有帮助的话,可以给这篇文章点一个赞👍
后面继续更新「编译安装NTL库」~

参考


  1. https://gmplib.org ↩︎

  2. tar.zst 文件格式解压 ↩︎

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐