未定义的引用CryptoPP :: AlignedAllocate(unsigned int)

时间:2012-07-21 09:28:38

标签: 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)'

如何修复此错误? 我的代码有问题吗?

我正在使用此软件包的synaptic包管理器安装crypto ++:

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

和libcrypto ++。a和libcrypto ++。所以可以在/ usr / lib /

中找到

提前致谢。

3 个答案:

答案 0 :(得分:6)

此命令看起来不对:

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

如果(正如你所说)libs在/usr/lib,那么你不应该说-L/usr/lib/crypto++

我认为libcrypto++8包在-L/usr/lib/crypto++目录中安装了它的libs,可能它们是不兼容的,并且不提供程序所需的未定义符号。

您应该简单地编译:

gcc -o test test.cpp -lcrypto++

(没有必要说-L/usr/lib,因为它是图书馆的默认位置。

答案 1 :(得分:4)

它解决了! 我改变了我的命令:

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

到这个命令:

g++ -o test test.cpp -L/usr/lib/ -lcryptopp -lpthread

我添加了-lpthread,因为我使用了这个命令之后:

g++ -o test test.cpp -L/usr/lib/ -lcryptopp

我收到这些错误:

./libcryptopp.so: undefined reference to `pthread_getspecific'
./libcryptopp.so: undefined reference to `pthread_key_delete'
./libcryptopp.so: undefined reference to `pthread_key_create'
./libcryptopp.so: undefined reference to `pthread_setspecific'

我误解了-L / usr / lib / crypto ++ arg,我以为编译器会在/ usr / lib / dir中搜索crypto ++,原来编译器会在-L / usr / lib / crypto ++ dir中搜索crypto ++ ,而包安装在-L / usr / lib / dir。

感谢@jonathan唤醒。

答案 2 :(得分:0)

我也有这个问题。 你的编译器需要将库文件绑定到你的程序,因为它无法找到你的decleration的任何实现!

我仍然没有解决我的问题。但你还有其他方法! 您可以使用库文件.cpp原始文件。

您最初可以从以下链接下载Cryptopp

https://www.cryptopp.com/cryptopp563.zip