新闻  |   论坛  |   博客  |   在线研讨会
在Ubuntu上安装NTL库以及编译测试
电子禅石 | 2024-09-09 20:02:42    阅读:295   发布文章

这篇文章是21年第一次安装的时候写的. 24年换电脑又需要重装一遍, 还是按照这个做的, 

连错误都一模一样. 只要按顺序做就能够安装成功.


介绍:

NTL是一个高性能的,可移植的c++库,提供任意长度整数的数据结构和算法;


于整数和有限域上的向量、矩阵和多项式;并且适用于任意精度的浮点运算。

我们在Ubuntu中进行安装. (我使用的是Windows下的子系统wsl,但是应该是一样的)


步骤:

0. 下载前的准备

首先我们要确保必须有g++ 和 m4

g++: sudo apt install g++

m4: sudo apt install m4

确认安装:g++ -v 和m4 --v

————————————————


3. 对GMP进行编译

首先我们把刚刚下载好的放到一起嗷。如下图所示:

然后进入gmp这个文件夹
一条一条依次输入

./configure

make

make check

sudo make install

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

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

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.5
4. 对NTL进行编译

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

./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

编译测试:

源文件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

————————————————


                        

原文链接:https://blog.csdn.net/weixin_45599342/article/details/121293041



                        


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
属于自己的技术积累分享,成为嵌入式系统研发高手。
推荐文章
最近访客