Libevent在vs2008的连接错误error LNK2019

来源:互联网 发布:php api接口实例 编辑:程序博客网 时间:2024/06/08 18:50

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三个文件

执行重新编译的指令

0 1