2012-07-21 36 views
7

Tôi đang sử dụng crypto ++ trong C++ linux. Đây là mã đơn giản của tôi:Tham chiếu không xác định đối với 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] << " "; 
      } 

     } 
    } 
} 

Khi tôi chạy nó, một số lỗi xảy ra:

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

Sau đó, tôi sử dụng lệnh

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

nhưng lỗi này vẫn còn:

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

Làm cách nào để khắc phục lỗi này? Có điều gì sai với mã của tôi không?

Tôi cài đặt crypto ++ sử dụng quản lý gói synaptic cho gói này:..

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

và libcrypto ++ a và libcrypto ++ như vậy có thể được tìm thấy trong/usr/lib/

Cảm ơn trước.

+0

tôi đã cố gắng sử dụng g ++ để biên dịch, nhưng những lỗi vẫn còn đó. Tôi nên liên kết mã C++ nào? cảm ơn. – user1533464

+0

tôi tin rằng AlignedAllocate (unsigned int) được sử dụng trong crypto ++/secblock.h bao gồm crypto ++/misc.h trong đó AlignedAllocate (unsigned int) được khai báo, nhưng bằng cách nào đó AlignedAllocate (unsigned int) thực hiện không tìm thấy, và lỗi này xảy ra. tôi nên làm gì? – user1533464

+0

Tôi đã cố gắng bao gồm crypto ++/misc.h trong chương trình của tôi, nhưng những lỗi đó vẫn còn bị làm mờ. – user1533464

Trả lời

5

Lệnh này trông sai:

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

Nếu (như bạn nói) libs là trong /usr/lib sau đó bạn không nên nói -L/usr/lib/crypto++

Tôi nghĩ rằng gói libcrypto++8 cài đặt libs của nó trong -L/usr/lib/crypto++ thư mục và có lẽ chúng không tương thích và không cung cấp các ký hiệu không xác định mà chương trình của bạn cần.

Bạn nên biên dịch với chỉ đơn giản là:

gcc -o test test.cpp -lcrypto++ 

(Không cần phải nói -L/usr/lib như đó là vị trí mặc định cho các thư viện anyway)

+0

cảm ơn, jonathan. nó hoạt động. – user1533464

3

nó giải quyết! tôi thay đổi lệnh của tôi từ:

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

để lệnh này:

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

i thêm -lpthread vì sau khi tôi sử dụng lệnh này:

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

tôi nhận được các lỗi này:

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

tôi hiểu lầm về -L/usr/lib/crypto ++ arg, tôi nghĩ rằng trình biên dịch sẽ tìm kiếm crypto ++ trong/usr/lib/dir, hóa ra trình biên dịch sẽ tìm kiếm crypto ++ trong -L/usr/lib/crypto ++ dir, trong khi gói cài đặt trong -L/usr/lib/dir.

nhờ @jonathan wakely.

0

tôi cũng gặp sự cố này. trình biên dịch của bạn cần phải liên kết các tệp thư viện với chương trình của bạn, do đó, vì nó không thể tìm thấy bất kỳ triển khai nào của sự giải mã của bạn!

tôi vẫn chưa giải quyết được sự cố của mình. nhưng bạn có một cách khác !!! bạn có thể thay thế .cpp các tệp gốc bằng các tệp thư viện.

bạn có thể tải Cryptopp ban đầu từ bên dưới liên kết:

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

Các vấn đề liên quan