Показване на недефинирана препратка към дефиниран обект

Опитвам се да хеширам няколко низа в моя проект. И аз използвам следния проект, който използва 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, защото трябва да е невярно и след това UINT_8 трябва да се дефинира от unsigned char. Моля помогнете.


person VinayJ    schedule 12.05.2011    source източник


Отговори (2)


SHA1.h не включва ограничения, следователно ULONG_MAX е недефиниран. Това води до проблеми на 32 битови системи.

Кажете #include <climits> някъде в горната част на файла и трябва да сте готови.

person Thorsten    schedule 19.07.2011
comment
Добре дошли в StackOverflow. Моля, не забравяйте да разгледате помощта за използване на форматирането MarkDown. Отделянето на време за форматиране на вашите въпроси и отговори ще ги направи по-четими и следователно полезни за другите. Има удобна връзка за помощ вдясно от текстовото поле, в което въвеждате вашите въпроси и отговори. - person marko; 16.11.2012

Едно нещо, което можете да направите, е да използвате типовете, дефинирани в SHA1.h във вашия собствен код, когато декларирате тест, за да сте сигурни, че извиквате функцията с правилните типове аргументи.

person dma    schedule 12.05.2011
comment
Сигурни ли сте, че дефиницията не е #ifdef-ed от препроцесора? - person ognian; 13.05.2011