9

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/ にあります。

前もって感謝します。

4

3 に答える 3

7

このコマンドは間違っているようです:

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

(あなたが言うように)ライブラリが入っている/usr/libなら、あなたは言うべきではありません-L/usr/lib/crypto++

libcrypto++8パッケージはそのライブラリをディレクトリにインストールすると思いますが-L/usr/lib/crypto++、おそらくそれらは互換性がなく、プログラムが必要とする未定義のシンボルを提供していません。

次のように簡単にコンパイルする必要があります。

gcc -o test test.cpp -lcrypto++

-L/usr/lib(とにかく、ライブラリのデフォルトの場所であるため、言う必要はありません)

于 2012-07-22T02:17:00.547 に答える
6

解決しました!コマンドを次の場所から変更します。

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に感謝します。

于 2012-07-22T02:27:49.100 に答える
0

私もこの問題を抱えています。宣言の実装が見つからないため、コンパイラはライブラリ ファイルをプログラムにバインドする必要があります。

私はまだ私の問題を解決していません。しかし、あなたには別の方法があります!!! 代わりに.cpp、ライブラリ ファイルを使用して元のファイルを作成できます。

Cryptopp以下のリンクから最初にダウンロードできます。

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

于 2016-04-17T10:20:19.387 に答える