2>libevent.lib(evutil_rand.obj) : error LNK2019: unresolved external symbol __imp__CryptGenRandom@12 referenced in function _arc4_seed_win32
2>libevent.lib(evutil_rand.obj) : error LNK2019: unresolved external symbol __imp__CryptAcquireContextA@20 referenced in function _arc4_seed_win32
解决方案:
1) 删除编译后的目标文件(obj文件)
进至目录\libevent-2.0.15-stable按修改时间排序查看最近生成的obj文件,删除当前目录下面的所有后缀名为obj的文件即可
2) 修改源代码
请修改./libevent-2.0.15-stable/arc4random.c中的arc4_seed_win32为下面的内容(即禁掉调用CryptAcquireContext和CryptGenRandom两个方法,即下图中灰掉背景的行)
#ifdef WIN32
#defineTRY_SEED_WIN32
static int
arc4_seed_win32(void)
{
/* This is adapted from Tor'scrypto_seed_rng() */
static int provider_set = 0;
static HCRYPTPROV provider;
unsigned char buf[ADD_ENTROPY];
//注释掉以下代码
//禁止调用CryptAcquireContext和CryptGenRandom两个方法
/*
if (!provider_set) {
if(!CryptAcquireContext(&provider, NULL, NULL, PROV_RSA_FULL,
CRYPT_VERIFYCONTEXT)) {
if (GetLastError() !=(DWORD)NTE_BAD_KEYSET)
return -1;
}
provider_set = 1;
}
if (!CryptGenRandom(provider,sizeof(buf), buf))
return -1;
*/
arc4_addrandom(buf, sizeof(buf));
memset(buf, 0, sizeof(buf));
arc4_seeded_ok = 1;
return 0;
}
#endif
3) 重新编译libevent-2.0.15-stable
\libevent-2.0.15-stable>nmake -f Makefile.nmake
4) 重新编译pecl-libevent-0.0.4
编译之前切进目录\libevent-2.0.15-stable> 然后删除libevent.exp libevent.lib, libevent.obj三个文件
执行重新编译的指令