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