《NTL库》使用教程(C++ 现代密码学)

2024年暑假,第一次使用NTL。

作为中文母语者,习惯性地搜索网络上的中文教程,但发现教程已经很脱离时代了。

在自己盲目探索过后,总结如下,希望对后续学者有所帮助!

下面使用 Visual Studio 2022 进行介绍。

2024-07-21@Seymour

[TOC]

一、官网下载开源代码

P1-1
  • 点击Windows: WinNTL-11_5_1.zip下载得到安装包。

  • 放在自己的一个合适位置,解压。

P1-2

二、编译生成静态库

  • 打开Visual Studio 2022 新建空项目。

    自行选择项目名称、文件夹位置(可任意位置,这里项目只是用来生成静态库lib的,后续甚至可以丢弃)。

    我的命名是NTL_lib

P2-1
  • 添加现有项
P2-2
  • 找到NTL的src目录,全选,添加

    F:\Data\TEST\WinNTL-11_5_1\src

P2-3
  • 右键项目 NTL_lib,点击属性,打开。
P2-4
  • 更改“配置类型”为“静态库(.lib)”。

    注意:配置的模式要一致,我这里是Debug。若是Release,操作一样,每次注意模式一致的。

P2-5
  • SDL检查 改为

    (否则会因为编译太严格而报错)

    warning C4146: 一元负运算符应用于无符号类型,结果仍为无符号类型

P2-7
  • 记得点击“应用”-“确定”,然后就可以退出属性页。
  • 然后点击“开始执行”。
P2-7-8
  • 最终,生成成功!就可以在对应的生成目录下看到有下面3个文件。

    生成完成后可能会有报错说不存在可执行文件,不用管,只需要看到生成下面三个文件即可。

    (注:如果是Release模式,则是生成2个文件。)

P2-8

如若您,已经捣鼓了半天,还是没能生成NTL_lib.lib

下面是我生成的lib,您可以直接使用:

NTL_lib_x64.zip

环境:Windows 64位(其他电脑环境无法使用我生成的lib)

三、开始自己的项目

  • 新建自己的项目。

    我的是 MyProject

P3-1
  • 新项目创建好。右键“源程序”,添加,新建项。

    如添加一个 main.cpp,写入以下的示例程序。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#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";
}

这时,应该还是不能使用,会显示如下:

P3-1-2
  • 又回到NTL的源代码,找到include文件夹,整个复制过来。
P3-2
  • 复制放到自己的新项目的资源文件下。
  • 还有刚刚生成的 .lib的3个文件也复制过来。
  • 如下图:
P3-3
  • 打开MyProject项目的属性:
    1. 打开C/C++的常规。
    2. 附件包含目录,添加刚刚复制过来的include文件夹。
    3. SDL检查改为否。
P3-4
  • 好的,现在应该不会标红了。
P3-4-5
  • 但是,还不能执行,继续后面的工作。

  • 右键源文件,添加,现有项。

P3-5
  • 选择刚刚复制来的 NTL_lib.lib 文件,添加。
P3-6
  • 至此,所有准备工作都完成了。
  • 点击“开始执行”。
P3-7
  • 至此,所有的工作都做好了。
  • 此后,可以在这个MyProject项目下添加任何新的cpp文件,都可以直接使用NTL库了。

这里提一下:

我们前面操作都是以配置Debug模式为例的,若希望是Release模式,则前面生成静态库也应该是Release模式。

注:尤其注意,Visual Studio比较坑,这两个的设置是单独的,而且可以交错修改,所以说,每次自己配置时,注意看一下是什么模式。同时,也要看,自己“开始执行”又是什么模式!!!