这篇文章是21年第一次安装的时候写的. 24年换电脑又需要重装一遍, 还是按照这个做的, 连错误都一模一样. 只要按顺序做就能够安装成功.
介绍:
NTL是一个高性能的,可移植的c++库,提供任意长度整数的数据结构和算法;对于整数和有限域上的向量、矩阵和多项式;并且适用于任意精度的浮点运算。我们在Ubuntu中进行安装. (我使用的是Windows下的子系统wsl,但是应该是一样的)
步骤:
0. 下载前的准备
首先我们要确保必须有g++ 和 m4
g++: sudo apt install g++
m4: sudo apt install m4
确认安装:g++ -v
和m4 --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/中),这样权限不会发生问题。
参考资料:
- https://stackoverflow.com/questions/42607099/installing-ntl-with-gmp
- https://libntl.org/doc/tour.html(选项5,9)
- https://stackoverflow.com/questions/50046463/version-number-mismatch-inconsistency-between-gmp-h-and-libgmp
- https://zhuanlan.zhihu.com/p/66102855