在Ubuntu上安装NTL库以及编译测试
这篇文章是21年第一次安装的时候写的. 24年换电脑又需要重装一遍, 还是按照这个做的,
连错误都一模一样. 只要按顺序做就能够安装成功.
介绍:
NTL是一个高性能的,可移植的c++库,提供任意长度整数的数据结构和算法;
对
于整数和有限域上的向量、矩阵和多项式;并且适用于任意精度的浮点运算。
我们在Ubuntu中进行安装. (我使用的是Windows下的子系统wsl,但是应该是一样的)
步骤:
0. 下载前的准备
首先我们要确保必须有g++ 和 m4
g++: sudo apt install g++
m4: sudo apt install m4
确认安装:g++ -v 和m4 --v
————————————————
然后进入gmp这个文件夹
一条一条依次输入
./configure make make check sudo make install
ls /usr/local/lib/ libgmp.a libgmp.so libgmp.so.10.5.0 libmosquittopp.so.1 libmosquitto.so.1 python2.7 libgmp.la libgmp.so.10 libmosquittopp.so libmosquitto.so pkgconfig python3.54. 对NTL进行编译
./configure make make check sudo make install
ATTENTION:这里在make过程中可能会出错,下图是我的报错提示
*** Checking for feature: COPY_TRAITS1 [yes] *** Checking for feature: COPY_TRAITS2 [yes] *** Checking for feature: CHRONO_TIME [yes] *** Checking for feature: MACOS_TIME [no] *** Checking for feature: POSIX_TIME [yes] *** Checking for feature: AES_NI [yes] *** Checking for feature: KMA [no] make[1]: Leaving directory '/mnt/hgfs/gitLab/ntl-11.5.1/src' make setup3 make[1]: Entering directory '/mnt/hgfs/gitLab/ntl-11.5.1/src' g++ -I../include -I. -g -O2 -std=c++11 -pthread -march=native -o gen_gmp_aux gen_gmp_aux.cpp -lgmp -lm ./gen_gmp_aux > ../include/NTL/gmp_aux.h NTL_GMP_LIP flag set GMP version check (6.3.0/6.1.0) *** version number mismatch: inconsistency between gmp.h and libgmp /bin/sh: line 1: 44940 Aborted (core dumped) ./gen_gmp_aux > ../include/NTL/gmp_aux.h makefile:360: recipe for target 'setup3' failed make[1]: *** [setup3] Error 134 make[1]: Leaving directory '/mnt/hgfs/gitLab/ntl-11.5.1/src' makefile:324: recipe for target 'setup-phase' failed make: *** [setup-phase] Error 2
我们看到说version number mismatch这一行是我们的出错原因。
这里我参考了 这个网站 中的某个回答,输入sudo ldconfig, 把新安装的gmp库更新下即可解决此问题。
Version number mismatch: inconsistency between gmp.h and libgmp - Stack Overflow
https://stackoverflow.com/questions/50046463/version-number-mismatch-inconsistency-between-gmp-h-and-libgmp
关于sudo ldconfig
之后应该顺利进行了,成功后如下图所示:
ls /usr/local/include/ gmp.h mosquitto.h mosquitto_plugin.h mosquittopp.h nlohmann NTL
编译测试:
#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
————————————————
原文链接:https://blog.csdn.net/weixin_45599342/article/details/121293041
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。