c++ - 未定义对 CryptoPP::AlignedAllocate(unsigned int) 的引用

标签 c++ undefined-reference crypto++

我在 c++ linux 中使用 crypto++。 这是我的简单代码:

#include <iostream>
#include <fstream>
#include <string.h>

#include "crypto++/cryptlib.h"
#include "crypto++/modes.h"
#include "crypto++/filters.h"
#include "crypto++/aes.h"
#include "crypto++/osrng.h"
#include "crypto++/strciphr.h"

using namespace std;
using namespace CryptoPP;

ifstream::pos_type size;
char * memblock;
int length;
char * _iv[AES::BLOCKSIZE];
char * keys[AES::MAX_KEYLENGTH];


void encriptCTR(byte * outbyte, const byte * inbyte, const byte * key, const byte * iv);

void encriptCTR(byte * outbyte, const byte * inbyte, const byte * key, const byte * iv)
{
    size_t inbyte_len = strlen((const char *)inbyte);
    CTR_Mode<AES>::Encryption ctr_encription(key, strlen((const char*)key), iv);
    ctr_encription.ProcessData(outbyte, inbyte, inbyte_len);
}

int main()
{
    ifstream file;
    file.open("testaja", ios::binary);
    if (file.is_open())
    {
        file.seekg (0, ios::end);
        length = file.tellg();
        memblock = new char [length];
        file.seekg (0, ios::beg);
        file.read (memblock, length);


        if (!file)
        {
            int a;
            a = (int)file.gcount();
            file.clear();
        }
        else
        {
            file.close();

            for (int i = 0; i < length; ++i)
            {
                cout << hex << (int)memblock[i] << " ";
            }

        }
    }
}

当我运行它时,发生了一些错误:

 undefined reference to `CryptoPP::AlignedAllocate(unsigned int)'
 undefined reference to `CryptoPP::UnalignedAllocate(unsigned int)'
 undefined reference to `CryptoPP::AlignedDeallocate(unsigned int)'
 undefined reference to `CryptoPP::UnalignedDeallocate(unsigned int)'

然后,我用命令

gcc -o test test.cpp -L/usr/lib/crypto++ -lcrypto++

但这个错误仍然存​​在:

undefined reference to `CryptoPP::AlignedAllocate(unsigned int)'
undefined reference to `CryptoPP::UnalignedAllocate(unsigned int)'
undefined reference to `CryptoPP::AlignedDeallocate(unsigned int)'
undefined reference to `CryptoPP::UnalignedDeallocate(unsigned int)'

如何解决这个错误? 我的代码有问题吗?

我正在使用此包的突触包管理器安装 crypto++:

libcrypto++-utils
libcrypto++8
libcrypto++8-dbg
libcrypto++-dev
libcrypto++-doc

和 libcrypto++.a 和 libcrypto++.so 可以在/usr/lib/中找到

提前致谢。

最佳答案

这个命令看起来不对:

gcc -o test test.cpp -L/usr/lib/crypto++ -lcrypto++

如果(如您所说)库在 /usr/lib 中,那么您不应该说 -L/usr/lib/crypto++

我认为 libcrypto++8 包将其库安装在 -L/usr/lib/crypto++ 目录中,并且可能它们不兼容并且不提供您的程序需要的 undefined symbol 。

你应该简单地编译:

gcc -o test test.cpp -lcrypto++

(没有必要说 -L/usr/lib 因为它是库的默认位置)

关于c++ - 未定义对 CryptoPP::AlignedAllocate(unsigned int) 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11591030/

相关文章:

c++ - 如何避免使用 CMake FetchContent 进行更新检查?

C++:字符串索引和保留标点符号的问题

C++将类的对象保存在数组中

c - 尝试在 Linux 上的 C/C++ 中使用 lp_solve 时出现 "undefined reference"

C++ undefined reference though function is defined in the same file

代码块中的 C 编程出现 undefined reference 'WinMain' 的错误

c++ - 执行 RSA 解密时密文无效

c++ - 将字节数组转换为十六进制时的空格 std::string C++

c++ - std::stoi 导致段错误

c# - 从 C# 调用时 CFB 模式的截断输出