1

プロジェクトでいくつかの文字列をハッシュしようとしています。そして、HAMC SHA1アルゴリズムhttp://www.codeproject.com/KB/recipes/HMACSHA1class.aspxを使用する次のプロジェクトを使用してい ます

苦労の末、コード全体をコンパイルすることができました。しかし、最終的には、未定義の参照に関する最後の問題が残ります。

次のように、プロジェクトで指定された HMAC SHA1 クラスを呼び出す次のコードを作成しました。

BYTE Key[20] ;
BYTE digest[20] ; 

unsigned char *test = (unsigned char *)"Hi There" ; 

extern "C" {
 jstring Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz );
}


jstring Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz )
{

memset(Key, 0x0b, 20) ;

CHMAC_SHA1 HMAC_SHA1 ;

HMAC_SHA1.HMAC_SHA1(test, strlen((const char *)test), Key, sizeof(Key), digest) ;

    return env->NewStringUTF("Hello from JNI Sample!");

}

次の HMAC_SHA1.cpp の次の行でエラーが発生しました。

CSHA1::Update((UNIT_8 *)key, key_len);

CSHA1::Update((UNIT_8 *)AppendBuf1, sizeof(m_ipad) + text_len);

CSHA1::Update((UNIT_8 *)AppendBuf2, sizeof(m_opad) + SHA1_DIGEST_LENGTH);

ここでエラーが発生します:

Error: undefined reference to 'CSHA1::Update(unsigned char*, unsigned long)'

今SHA1.hで

私は次のコードを見ることができます

/////////////////////////////////////////////// /////////////////////////// // 8ビットと32ビットの変数を定義する

#ifndef UINT_32

#ifdef _MSC_VER

#define UINT_8  unsigned __int8
#define UINT_32 unsigned __int32

#else

#define UINT_8 unsigned char

#if (ULONG_MAX == 0xFFFFFFFF)
#define UINT_32 unsigned long
#else
#define UINT_32 unsigned int
#endif

#endif
#endif

/////////////////////////////////// 関数宣言は次のとおりです。

// Update the hash value
void Update(UINT_8 *data, UINT_32 len);

私はWindows環境を使用していますが、cygwinでコンパイルしています。

なぜこのようなエラーが発生するのかわかりません

エラー: 「CSHA1::Update(unsigned char*, unsigned long)」への未定義の参照

何が問題なのか、どのように修正できるのか、誰でも指摘できますか?

_MSC_VER の何かが間違っていると思います。これは false である必要があり、UINT_8 は unsigned char で定義する必要があります。助けてください。

4

2 に答える 2

2

SHA1.hclimits を含まないため、ULONG_MAX定義されていません。これにより、32 ビット システムで問題が発生します。

#include <climits> ファイルの先頭のどこかに言ってください。そうすれば完了です。

于 2011-07-19T12:35:57.560 に答える
1

実行できることの1つは、テストを宣言するときにSHA1.hで定義された型を独自のコードで使用して、正しい引数型で関数を呼び出していることを確認することです。

于 2011-05-12T14:28:40.877 に答える