Скомпилируйте программу, используя 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
Другие вопросы по тегам