在Ubuntu上安装NTL库以及编译测试

这篇文章是21年第一次安装的时候写的. 24年换电脑又需要重装一遍, 还是按照这个做的, 连错误都一模一样. 只要按顺序做就能够安装成功.

介绍:

NTL是一个高性能的,可移植的c++库,提供任意长度整数的数据结构和算法;对于整数和有限域上的向量、矩阵和多项式;并且适用于任意精度的浮点运算。我们在Ubuntu中进行安装. (我使用的是Windows下的子系统wsl,但是应该是一样的)

步骤:

0. 下载前的准备

首先我们要确保必须有g++ 和 m4
g++: sudo apt install g++
m4: sudo apt install m4
确认安装:g++ -vm4 --v

1. 下载GMP并解压

GMP网站:https://gmplib.org/,这里我下载的是当时最新的版本gmp-6.2.1。
下载解压过程不再赘述,我是在wsl里面所以很方便(直接在windows里下载, 然后拖WSL的文件夹),如果大家可以使用图形化界面也会很方便,使用命令行下载的话就自己去百度一下,我也不懂。

2. 下载NTL并解压

NTL网站:https://libntl.org/download.html,这里我下载的还是当时最新的版本ntl-11.5.1

3. 对GMP进行编译

首先我们把刚刚下载好的放到一起嗷。如下图所示:
在这里插入图片描述
然后进入gmp这个文件夹
一条一条依次输入

./configure

make

make check

sudo make install

这一步应该不存在问题,正确编译后:
输入ls /usr/local/include/ 会看到gmp.h

输入ls /usr/local/lib/ 会看到一些这样子的文件(我的可能多一些,因为我是两个实验做完截的图)
在这里插入图片描述

4. 对NTL进行编译

我们进入ntl的文件夹中的src文件夹中,然后重复上面的指令:

./configure

make

make check

sudo make install

ATTENTION:这里在make过程中可能会出错,下图是我的报错提示
在这里插入图片描述我们看到说version number mismatch这一行是我们的出错原因。
这里我参考了 这个网站 中的某个回答,输入sudo ldconfig, 把新安装的gmp库更新下即可解决此问题。
关于sudo ldconfig
之后应该顺利进行了,成功后如下图所示:
在这里插入图片描述

编译测试:

源文件test.cpp:

#include <NTL/ZZ.h>

using namespace std;
using namespace NTL;

int main()
{
   ZZ a, b, c;

   cin >> a;
   cin >> b;
   c = (a+1) * (b+1);
   cout << c << "\n";
}

在命令行输入:

g++ test.cpp -o test.exe -lntl -pthread -lgmp

就可以生成test可执行文件,执行即可。

关于wsl下载和文件权限:

关于wsl下载的一些事:
如果把在Windows里下载解压好的文件夹拖入Ubuntu中,会发生权限问题,拖入的文件甚至连访问都不可以,需要使用chmod -r 777 file_name指令去加权限(使用-r,因为需要递归地改变,子文件也是都需要改的)。
那比较简单的替代方法就是在Windows中解压后,在Ubuntu中使用cp指令复制一个过去(Windows磁盘挂载在mnt/中),这样权限不会发生问题。

参考资料:

  1. https://stackoverflow.com/questions/42607099/installing-ntl-with-gmp
  2. https://libntl.org/doc/tour.html(选项5,9)
  3. https://stackoverflow.com/questions/50046463/version-number-mismatch-inconsistency-between-gmp-h-and-libgmp
  4. https://zhuanlan.zhihu.com/p/66102855
  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值