我想在我的項目散列弦數。而我正在使用下面的項目,使用HAMC SHA1算法 http://www.codeproject.com/KB/recipes/HMACSHA1class.aspx顯示未定義refrence一個定義的對象
我能夠編譯整個代碼後,很多麻煩。但最後我還剩下最後一個與未定義參考有關的問題。
我已經寫了下面的代碼envoke在如下所示的HMAC_SHA1.cpp以下線,如遇到
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類如下:
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 ::更新(無符號字符*,無符號長)」
任何人都可以請指出是什麼問題以及如何糾正?
我相信成纔是錯_MSC_VER原因應該是假的,然後UINT_8應無符號的字符來定義。請幫忙。
我想它太...但它不工作。 – VinayJ 2011-05-12 15:02:07
你確定這個定義沒有被預處理器#define去掉嗎? – ognian 2011-05-13 06:02:36