Скомпилируйте программу, используя mhash
Я пытаюсь использовать lessfs и узнаю, как он использует mhash для создания своих криптографических отпечатков, поэтому я смотрю на mhash, чтобы увидеть, как он обрабатывает алгоритмы хеширования, поэтому я пытаюсь запустить некоторые из примеров, представленных в программе, но я сталкиваюсь с осложнениями и ошибками
Пример Mhash, который я пытался решить, находится здесь: http://mhash.sourceforge.net/mhash.3.html (или ниже)
#include <mhash.h>
#include <stdio.h>
int main()
{
char password[] = "Jefe";
int keylen = 4;
char data[] = "what do ya want for nothing?";
int datalen = 28;
MHASH td;
unsigned char *mac;
int j;
td = mhash_hmac_init(MHASH_MD5, password, keylen,
mhash_get_hash_pblock(MHASH_MD5));
mhash(td, data, datalen);
mac = mhash_hmac_end(td);
/*
* The output should be 0x750c783e6ab0b503eaa86e310a5db738
* according to RFC 2104.
*/
printf("0x");
for (j = 0; j < mhash_get_block_size(MHASH_MD5); j++) {
printf("%.2x", mac[j]);
}
printf("\n");
exit(0);
}
Но я получаю следующие ошибки:
mhash.c.text+0x6c): undefined reference to `mhash_get_hash_pblock'
mhash.c.text+0x82): undefined reference to `mhash_hmac_init'
mhash.c.text+0x9c): undefined reference to `mhash'
mhash.c.text+0xa8): undefined reference to `mhash_hmac_end'
mhash.c.text+0xf9): undefined reference to `mhash_get_block_size'
collect2: error: ld returned 1 exit status
1 ответ
Это ошибка компоновщика - ld
программа компоновки в системах Unix Компоновщик жалуется, потому что вы используете библиотечные функции (mhash_get_hash_pblock
и т. д.), но вы не дали им определение.
Директива препроцессора #include <mhash.h>
объявляет функции (и типы и т. д.) из библиотеки mhash. Этого достаточно для компиляции вашей программы (создайте .o
файл), но не связывать его (для создания исполняемого файла): вам также нужно определить эти функции.
добавлять -lmhash
в конце вашей командной строки компиляции. Это указывает компоновщику, что он может искать функции в библиотеке libmhash.a
на его пути поиска; во время выполнения функции будут загружены из libmhash.so
на пути поиска. Обратите внимание, что библиотеки должны появляться в командной строке после их использования: компоновщик создает ссылку на необходимые функции, которые должны быть предоставлены последующим аргументом.
gcc -o myprogram myprogram.c -lmhash