使用mhash编译程序

时间:2014-07-03 19:20:46

标签: c compilation shared-libraries 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 个答案:

答案 0 :(得分:3)

这是linker错误 - ld是Unix系统上的链接器程序。链接器抱怨是因为您正在使用库函数(mhash_get_hash_pblock等),但您没有为它们提供定义。

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

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

gcc -o myprogram myprogram.c -lmhash