3

我正在尝试使用 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
4

1 回答 1

3

这是一个链接器错误 — <a href="http://en.wikipedia.org/wiki/Ld_%28Unix%29" rel="nofollow">ld是 Unix 系统上的链接器程序。链接器抱怨是因为您正在使用库函数(mhash_get_hash_pblock等),但您没有为它们提供定义。

预处理器指令从 mhash 库中#include <mhash.h> 声明函数(和类型等)。这足以编译您的程序(生成.o文件)但不能链接它(生成可执行文件):您还需要定义这些函数。

-lmhash在编译命令行的末尾添加。这指示链接器可以libmhash.a在其搜索路径上查找库中的函数;在运行时,函数将从libmhash.so搜索路径加载。请注意,库在使用后必须在命令行中出现:链接器构建所需函数的链接,这些函数需要由后续参数提供。

gcc -o myprogram myprogram.c -lmhash
于 2014-07-03T20:40:05.543 回答