致命错误:blake2.h:没有这样的文件或目录
fatal error: blake2.h: No such file or directory
我正在使用RaspberryPi,Crypto++6是apt唯一可用的版本,我不能包含哈希函数库blake2,并且/usr/include/cryptopp/blake2.h不存在,我也尝试通过github手动安装它,下面是我手动安装它的方式,但仍然不起作用,blake.h也不存在于包含文件夹中, 我能做什么?提前谢谢你!
我正在使用<crypto++/libname.h>
,因为我使用的是基于 Debian 的发行版(拉伸(,但是当我尝试<cryptopp/blake.h>
它可以工作并且这是在我手动安装库之后,现在我遇到了另一个错误,我应该使用 crypto++ 或 cryptopp
/tmp/ccTmS4UQ.o: In function `main':
test.cpp:(.text+0x24): undefined reference to `CryptoPP::BLAKE2b::BLAKE2b(bool, unsigned int)'
/tmp/ccTmS4UQ.o: In function `CryptoPP::BLAKE2b::~BLAKE2b()':
test.cpp:(.text._ZN8CryptoPP7BLAKE2bD2Ev[_ZN8CryptoPP7BLAKE2bD5Ev]+0x74): undefined reference to `vtable for CryptoPP::BLAKE2b'
test.cpp:(.text._ZN8CryptoPP7BLAKE2bD2Ev[_ZN8CryptoPP7BLAKE2bD5Ev]+0x78): undefined reference to `vtable for CryptoPP::BLAKE2b'
collect2: error: ld returned 1 exit status
和:
uname -a
Linux raspberrypi 4.19.42-v7+ #1219 SMP Tue May 14 21:20:58 BST 2019 armv7l GNU/Linux
ldconfig -p | grep crypto++
libcrypto++.so.6 (libc6,hard-float) => /usr/lib/arm-linux-gnueabihf/libcrypto++.so.6
libcrypto++.so (libc6,hard-float) => /usr/lib/arm-linux-gnueabihf/libcrypto++.so
还有一个程序:
#include <crypto++/cryptlib.h>
#include <crypto++/blake2.h>
#include <iostream>
int main (int argc, char* argv[])
{
using namespace CryptoPP;
BLAKE2b hash;
std::cout << "Name: " << hash.AlgorithmName() << std::endl;
std::cout << "Digest size: " << hash.DigestSize() << std::endl;
std::cout << "Block size: " << hash.BlockSize() << std::endl;
return 0;
}
我已经卸载了该软件包,并通过github手动重新安装 sudo git clone https://github.com/weidai11/cryptopp
cd cryptopp
sudo make
sudo make install
我摆脱了 blake2.h 丢失的错误,但我得到了许多未定义的引用错误,例如(/tmp/cc9AY7g8.o:(.rodata._ZTIN8CryptoPP25MessageAuthenticationCodeE[_ZTIN8CryptoPP25MessageAuthenticationCodeE]+0x18): undefined reference to typeinfo for CryptoPP::HashTransformation)
我用一个 shell 脚本编写了示例,如下所示:
g++ -lrt -lpthread -lstdc++ -lcrypto -lcryptopp "$1"
"$LIBRARY_DIR/arduPiLoRa.o"
"$ARDUPIAPI_DIR/arduPiUART.o"
"$ARDUPIAPI_DIR/arduPiUtils.o"
"$ARDUPIAPI_DIR/arduPiMultiprotocol.o"
"$ARDUPI_DIR/arduPi.o"
"$LIBRARY_DIR/ecdh.o"
"$LIBRARY_DIR/aes.o"
-I"$ARDUPI_DIR"
-I"$ARDUPIAPI_DIR"
-I"$LIBRARY_DIR"
-o "$1_exe"
但是当我直接使用 g++ -o blake2 blake2.cpp -lcryptopp
编译它时,未定义的引用错误消失了,我成功地编译了它,
我已经更改了 shell 脚本,现在它终于起作用了,但我并没有完全取消它,
g++ -DNDEBUG -g3 -O2 -Wall -Wextra -lrt -lpthread -lstdc++ -lcrypto -lcryptopp -l:libcryptopp.a "$1"
"$LIBRARY_DIR/arduPiLoRa.o"
"$ARDUPIAPI_DIR/arduPiUART.o"
"$ARDUPIAPI_DIR/arduPiUtils.o"
"$ARDUPIAPI_DIR/arduPiMultiprotocol.o"
"$ARDUPI_DIR/arduPi.o"
"$LIBRARY_DIR/ecdh.o"
"$LIBRARY_DIR/aes.o"
-I"$ARDUPI_DIR"
-I"$ARDUPIAPI_DIR"
-I"$LIBRARY_DIR"
-o "$1_exe"
-l:libcryptopp.a
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- 在C++中查找文件
- c++库的公共头文件中应该包含什么
- 用c++从输入文件中读取另一行
- Cppcheck生成xml转储文件
- 读取文件的最后一行并输入到链接列表时出错
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 如何将内容数组写入文本文件?
- 致命错误:blake2.h:没有这样的文件或目录