Я загрузил и установил библиотеку NTL на своем Ubuntu. В настоящее время я использую 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 непосредственно в папку с программой. Я сделал именно это, но все равно получаю ту же ошибку.
Если вам не нужна последняя (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 <путь>.
Если вам нужна более новая версия, которую имеет ваш дистрибутив (проверьте http://packages.ubuntu.com/ru/source/trusty/ntl), вы можете попытаться самостоятельно собрать библиотечный пакет.
Вы сказали в комментариях:
Создала папку с именем "include" в папке.cpp и уже включила библиотеку NTL в эту папку
Но ваша команда компиляции говорит:
g++ keygen.cpp -o keygen -I ../include -L ../lib -lntl -lm.
Мне кажется, вы имели в виду:
g++ keygen.cpp -o keygen -I ./include -L ../lib -lntl -lm.
# ^^^^^^^^^
так как ..
идет вверх по одному каталогу.
Проблема с вашей попыткой скомпилировать и вывести исполняемый файл, по-видимому, является невозможностью компилятора связать необходимую библиотеку после получения файла .o
. Объекта.
Многие люди часто проверяют точку разлома, разделяя эти два этапа, сначала компилируя g++ -c
затем связывая библиотеки для исполняемого файла g++ -o
. Хотя переключатель -Wall
не всегда работает, попытка его предоставить вам как можно больше информации во время компиляции также может быть полезна.
Проверьте эту веб-страницу. Что касается использования разных переключателей для ссылок на библиотеки, попробуйте эту веб-страницу.
Я не уверен, что это была опечатка; но мне интересно, есть ли пространство между коммутатором и каталогом: -I../include
и -L../lib
была проблема.
KeyGen.cpp:9:20: error: NTL/ZZ.h: No such file or directory
является сообщением от компилятора, точнее, от препроцессора
cpp -I ../include -x c++ -v
чтобы получить весь список включаемых каталогов