我已经在我的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库直接添加到我的程序文件夹中。我做到了这一点,但我仍然得到同样的错误。
答案 0 :(得分:1)
如果您不需要最新的(6.0.0)版本的NTL,您可以在Ubuntu中执行以下操作:
user@host:~$ sudo apt-get install libntl-dev Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: libntl-5.4.2 The following NEW packages will be installed: libntl-5.4.2 libntl-dev 0 upgraded, 2 newly installed, 0 to remove and 112 not upgraded. Need to get 2,035 kB of archives. After this operation, 7,016 kB of additional disk space will be used. Do you want to continue [Y/n]? y Get:1 http://ftp.de.debian.org/debian/ squeeze/main libntl-5.4.2 amd64 5.4.2-4 [767 kB] Get:2 http://ftp.de.debian.org/debian/ squeeze/main libntl-dev amd64 5.4.2-4 [1,268 kB] Fetched 2,035 kB in 2s (1,017 kB/s) Selecting previously deselected package libntl-5.4.2. (Reading database ... 59184 files and directories currently installed.) Unpacking libntl-5.4.2 (from .../libntl-5.4.2_5.4.2-4_amd64.deb) ... Selecting previously deselected package libntl-dev. Unpacking libntl-dev (from .../libntl-dev_5.4.2-4_amd64.deb) ... Can not write log, openpty() failed (/dev/pts not mounted?) Setting up libntl-5.4.2 (5.4.2-4) ... Setting up libntl-dev (5.4.2-4) .. user@host:~$
之后,系统中安装了包含所有开发标题的完整编译的NTL库,您可以使用它编译程序,而无需任何其他-I< path>。
如果您需要发行版具有的较新版本(请查看http://packages.ubuntu.com/en/source/trusty/ntl),您可以尝试自行构建库包。
答案 1 :(得分:0)
尝试编译和输出可执行文件的问题似乎是编译器在获取对象 .o
文件后无法链接必要的库。
许多人经常通过首先编译g++ -c
然后通过链接可执行文件g++ -o
的库来分离两个阶段来测试错误点。尽管-Wall
开关并不总是有效,但尝试在编译期间尽可能多地为您提供信息也会有所帮助。
查看this网页。至于使用不同的开关链接库,请尝试this网页。
我不确定这是不是一个错字;但我想知道交换机和目录之间的空间:
-I ../include
和-L ../lib
是否是问题。
答案 2 :(得分: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.
# ^^^^^^^^^
因为..
上升了一个目录。