Неопределенная ссылка на CryptoPP:: AlignedAllocate(unsigned int)

я использую crypto++ в c++ linux. Вот мой простой код:

#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++ с помощью synaptic package manager для этого пакета:

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

и libcrypto++.a и libcrypto++.так можно найти in / usr/lib/

спасибо заранее.

3 ответов


эта команда выглядит не так:

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

если (как вы говорите) libs находятся в /usr/lib тогда вы не должны говорить -L/usr/lib/crypto++

Я думаю libcrypto++8 пакет устанавливает ее libs в -L/usr/lib/crypto++ каталог, и, предположительно, они несовместимы и не предоставляют неопределенные символы, необходимые вашей программе.

вы должны составить просто:

gcc -o test test.cpp -lcrypto++

(нет необходимости говорить -L/usr/lib поскольку это место по умолчанию для библиотек в любом случае)


она решена! я меняю команду:

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, я думал, что компилятор будет искать crypto++ в / usr/ lib/dir, оказалось, что компилятор будет искать crypto++ в-L/usr/lib/crypto++ dir, тогда как пакет, установленный в-L / usr / lib/ dir.

спасибо @jonathan wakely.


у меня тоже есть эта проблема. вашему компилятору необходимо привязать файлы библиотеки к вашей программе , так как он не может найти никакой реализации вашего склонения!

Я все еще не решаю свою проблему. но у тебя есть другой путь!!! вы можете вместо .cpp исходные файлы с файлами библиотеки.

можно скачать Cryptopp первоначально снизу ссылка:

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