2012-07-21 7 views
7

Sto usando crypto ++ in C++ linux. Ecco il mio codice semplice:Riferimento non definito a CryptoPP :: AlignedAllocate (unsigned int)

#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] << " "; 
      } 

     } 
    } 
} 

quando l'eseguo, alcuni Errore:

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)' 

Poi, ho usato il comando

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

ma questo errore ancora lì:

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)' 

Come posso correggere questo errore? C'è qualcosa che non va nel mio codice?

Sto installando Crypto ++ utilizzando gestore di pacchetti synaptic per questo pacchetto:..

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

e libcrypto ++ una e libcrypto ++ così può essere trovato in/usr/lib/

Grazie in anticipo.

+0

ho cercato uso g ++ per compilare, ma quelli l'errore ancora lì. quale codice C++ dovrei collegare? Grazie. – user1533464

+0

credo che AlignedAllocate (unsigned int) sia usato in crypto ++/secblock.h che include crypto ++/misc.h dove AlignedAllocate (unsigned int) è dichiarato, ma in qualche modo l'implementazione di AlignedAllocate (unsigned int) non trovata, e questo errore si è verificato. cosa dovrei fare? – user1533464

+0

ho provato ad includere crypto ++/misc.h nel mio programma, ma questi errori si sono ancora verificati. – user1533464

risposta

5

Questo comando sembra sbagliato:

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

Se (come dici tu) le librerie sono in /usr/lib allora non dovrebbe essere dicendo -L/usr/lib/crypto++

Credo che il pacchetto libcrypto++8 installa le sue librerie nel -L/usr/lib/crypto++ directory e presumibilmente sono incompatibili e non forniscono i simboli indefiniti richiesti dal programma.

Si dovrebbe compilare con semplice:

gcc -o test test.cpp -lcrypto++ 

(Non c'è bisogno di dire -L/usr/lib come è la posizione predefinita per le librerie in ogni caso)

+0

grazie, Jonathan. Funziona. – user1533464

3

è risolto! cambio il mio comando da:

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

a questo comando:

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

aggiungo -lpthread perché dopo ho usato questo comando:

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

ottengo questi errori:

./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' 

ho frainteso su -L/usr/lib/crypto ++ arg, ho pensato che il compilatore cercasse crypto ++ in/usr/lib/dir, ha scoperto che il compilatore cercherà crypto ++ in -L/usr/lib/crypto ++ dir, considerando che il pacchetto installato in -L/usr/lib/dir.

grazie a @jonathan wakely.

0

ho anche questo problema. il tuo compilatore ha bisogno di associare i file di libreria al tuo programma, così da non poter trovare alcuna implementazione della tua declinazione!

Non riesco ancora a risolvere il mio problema. ma tu hai un altro modo !!! è possibile invece i file originali .cpp con i file di libreria.

è possibile scaricare Cryptopp originario sotto il collegamento:

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