Невозможно скомпилировать, ошибка: cryptlib.h: нет такого файла или каталога - PullRequest
0 голосов
/ 07 декабря 2018

Я скачал Crypto ++ 7.0.0 с официального сайта, собрал из него статическую библиотеку, включил заголовок cryptlib с:

#include "cryptlib.h"

и когда я пытаюсь скомпилировать свою программу с:

gcc main.cpp ./cryptopp700/libcryptopp.a

это вызывает у меня такие ошибки:

main.cpp:2:10: fatal error: cryptlib.h: No such file or directory
 #include "cryptlib.h"
          ^~~~~~~~~~~~
compilation terminated.

Я также попытался:

-L. -llibcryptopp //while moving libcryptopp.a to the same directory main.cpp is
-L./cryptopp700 -llibcryptopp

, поэтому я начал задаваться вопросом, что я делаю что-то не так, нокогда я проверял примеры кода со статическими библиотеками, все было хорошо.

Помогите, пожалуйста.

1 Ответ

0 голосов
/ 07 декабря 2018

На основе:

main.cpp:2:10: fatal error: cryptlib.h: No such file or directory

И:

gcc main.cpp ./cryptopp700/libcryptopp.a

Ваша структура каталогов выглядит следующим образом:

+- Project Folder
  |
  +- main.cpp
  |
  +- cryptopp700
    |
    +- cryltib.h
    +- ...
    +- libcryptopp.a

Вам нужно всего лишь добавить cryptopp700/ в путь поиска заголовка включения с помощью -I:

g++ main.cpp -I ./cryptopp700 ./cryptopp700/libcryptopp.a

Обратите внимание, что вам также следует использовать g ++ (компилятор C ++), а не gcc (компилятор C).


Вы также можете установить библиотеку, поскольку она была собрана.По умолчанию он устанавливается в /usr/local с помощью:

skylake:cryptopp$ sudo make install
[sudo] password for jwalton:
install -m 644 *.h /usr/local/include/cryptopp
install -m 644 libcryptopp.a /usr/local/lib
install cryptest.exe /usr/local/bin
install -m 644 TestData/*.dat /usr/local/share/cryptopp/TestData
install -m 644 TestVectors/*.txt /usr/local/share/cryptopp/TestVectors

Вы можете установить в другое место, используя PREFIX:

skylake:cryptopp$ sudo make install PREFIX=/opt/local
install -m 644 *.h /opt/local/include/cryptopp
install -m 644 libcryptopp.a /opt/local/lib
install cryptest.exe /opt/local/bin
install -m 644 TestData/*.dat /opt/local/share/cryptopp/TestData
install -m 644 TestVectors/*.txt /opt/local/share/cryptopp/TestVectors

Затем вы измените команду compile и linkна что-то вроде:

g++ main.cpp -I /usr/local/include/cryptopp -o main.exe /usr/local/lib/libcryptopp.a

После установки, как показано ниже, я обычно говорю людям, чтобы они запускали самотестирование.К сожалению, не сработает, если все, что вы сделали, было make -j 4 или аналогичным.

$ make -j 4
...

$ sudo make install
[sudo] password for jwalton:
install -m 644 *.h /usr/local/include/cryptopp
install -m 644 libcryptopp.a /usr/local/lib
install cryptest.exe /usr/local/bin
install -m 644 TestData/*.dat /usr/local/share/cryptopp/TestData
install -m 644 TestVectors/*.txt /usr/local/share/cryptopp/TestVectors

Вот ошибка, которую вы получите:

skylake:cryptopp$ cd /opt/local/bin/
skylake:bin$ ./cryptest.exe v
Using seed: 1544189072

Testing Settings...

passed:  Your machine is little endian.
passed:  Aligned data access.
passed:  sizeof(byte) == 1
passed:  sizeof(word16) == 2
passed:  sizeof(word32) == 4
passed:  sizeof(word64) == 8
passed:  sizeof(word128) == 16
passed:  sizeof(hword) == 4, sizeof(word) == 8, sizeof(dword) == 16
passed:  cacheLineSize == 64
hasSSE2 == 1, hasSSSE3 == 1, hasSSE4.1 == 1, hasSSE4.2 == 1, hasAVX == 1, hasAVX2 == 1, hasAESNI == 1, hasCLMUL == 1, hasRDRAND == 1, hasRDSEED == 1, hasSHA == 0, isP4 == 0
...

SHA validation suite running...

Exception caught: Can not open file TestVectors/sha.txt for reading

Я думаю, что вещи должны "просто работа "для тебя.Вам не нужно беспокоиться о CRYPTOPP_DATA_DIR для общего случая.И вам, конечно же, не нужно иметь RTFM, чтобы заставить работать общее дело.Это говорит о том, что в нашем процессе разработки есть дефект.

Мы собираемся исправить это сейчас: выпуск 760, Выполнение самопроверки после установки обычным пользователем .

...