1

我已经在我的 Ubuntu 上下载并安装了 NTL 库。我目前正在使用 gedit 编写我的程序,并将此ZZ.h标头包含在我的程序中。这就是我在终端中编译程序的方式:- g++ keygen.cpp -o keygen -I ../include -L ../lib -lntl -lm.

我很确定这条线是正确的,但由于某些未知原因,我收到以下错误:

KeyGen.cpp:9:20: error: NTL/ZZ.h: No such file or directory
KeyGen.cpp:15: error: expected constructor, destructor, or type conversion before ‘int’

解决方案对我来说似乎很简单:将 NTL 库直接添加到我的程序文件夹中。我就是这样做的,但我仍然得到同样的错误。

4

3 回答 3

2

如果您不需要最新 (6.0.0) 版本的 NTL,您可以在 Ubuntu 中执行以下操作:

user@host:~$ sudo apt-get install libntl-dev
阅读包裹清单...完成
构建依赖树       
读取状态信息...完成
将安装以下额外软件包:
  libntl-5.4.2
将安装以下新软件包:
  libntl-5.4.2 libntl-dev
0 升级,2 新安装,0 删除,112 未升级。
需要获得 2,035 kB 的档案。
此操作后,将使用 7,016 kB 的额外磁盘空间。
您要继续 [Y/n] 吗?是的
获取:1 http://ftp.de.debian.org/debian/squeeze/main libntl-5.4.2 amd64 5.4.2-4 [767 kB]
获取:2 http://ftp.de.debian.org/debian/squeeze/main libntl-dev amd64 5.4.2-4 [1,268 kB]
在 2 秒内获取 2,035 kB (1,017 kB/s)   
选择以前取消选择的软件包 libntl-5.4.2。
(正在读取数据库...当前安装的 59184 个文件和目录。)
解压 libntl-5.4.2(来自 .../libntl-5.4.2_5.4.2-4_amd64.deb)...
选择以前取消选择的软件包 libntl-dev。
解压 libntl-dev(来自 .../libntl-dev_5.4.2-4_amd64.deb)...
无法写入日志,openpty() 失败(/dev/pts 未安装?)
设置 libntl-5.4.2 (5.4.2-4) ...
设置 libntl-dev (5.4.2-4) ..
用户@主机:~$

之后,带有所有开发头文件的完整编译的 NTL 库安装在您的系统中,您可以使用它编译您的程序,而无需任何额外的 -I<path>。

如果您需要发行版具有的较新版本(请查看http://packages.ubuntu.com/en/source/trusty/ntl),您可以尝试自己构建库包。

于 2014-01-30T13:35:54.967 回答
0

你在评论中说:

我在 .cpp 文件夹中创建了一个名为“include”的文件夹,并且已经在该文件夹中包含了 NTL 库

但是你的编译命令说:

g++ keygen.cpp -o keygen -I ../include -L ../lib -lntl -lm.

在我看来,你的意思是:

g++ keygen.cpp -o keygen -I ./include -L ../lib -lntl -lm.
#                           ^^^^^^^^^

因为..上升了一个目录。

于 2014-01-30T16:08:55.437 回答
0

您尝试编译和输出可执行文件的问题似乎是编译器在获取目标.o文件后无法链接必要的库。

g++ -c许多人经常通过首先编译然后通过链接可执行文件的库来分离两个阶段来测试故障点g++ -o。尽管-Wallswitch 并不总是有效,但尝试在编译期间为您提供尽可能多的信息也会有所帮助。

检查这个网页。至于使用不同的开关链接库试试这个网页。

我不确定这是否是一个错字;但我想知道 switch 和 directory: 之间的空间是否
-I ../include-L ../lib
问题所在。

于 2014-01-30T13:50:10.373 回答