vs2013 编译libevent以及出现的问题
2017-08-30 14:52
274 查看
编译静态库
转载自:http://blog.csdn.net/flyingleo1981/article/details/518223431 解压
把上面下载到libevent-2.0.22-stable.tar.gz解压,得到libevent-2.0.22-stable文件夹
2 添加宏定义
在libevent-2.0.22-stable文件夹下找到下面三个文件:
event_iocp.c
evthread_win32.c
listener.c
打开并在开头加上宏定义:
#define _WIN32_WINNT 0x0500
因为event_iocp.c里用到<winbase.h>头文件里的函数定义,如InitializeCriticalSectionAndSpinCount,
<windows.h>会包含<winbase.h>,而<winbase.h>这个头文件里这个函数是这样定义的:
#if (_WIN32_WINNT >= 0x0403)
WINBASEAPI
BOOL WINAPI
InitializeCriticalSectionAndSpinCount(
__out LPCRITICAL_SECTION lpCriticalSection,
__in DWORD dwSpinCount
);
WINBASEAPI
DWORD
WINAPI
SetCriticalSectionSpinCount(
__inout LPCRITICAL_SECTION lpCriticalSection,
__in DWORD dwSpinCount
);
#endif
所以要定义_WIN32_WINNT这个宏,而且值要大于0x0403。
如果没有这个宏或不满足条件,编译器会假定这个函数没有定义,
等到链接时再寻找它,这样这个函数的符号就假定返回一个int,
而显示标准库文件里这个函数不是返回int,所以在链接时就会找不到这个函数符号。
注意:宏一定要定义在#include <windows.h>之前,不然还是没有作用。
3 编译
使用vs的命令行工具,cd到libevent-2.0.22-stable目录,执行脚本makefile.nmake,命令如下:
nmake /f Makefile.nmake
这样就会生成三个静态库:
libevent_core.lib
libevent_extras.lib
libevent.lib
编译过程中出现的问题:
这个错误应该是:编译测试工程时,遇到的错误,我是直接按照下面做法做下去的,结果一样,这个错误和静态库的生成无关(要是有关系,lib不会生成)
错误原因:我的版本是2.18,test里面缺少这个print-winsock-errors.c文件(或许是libevent的大神发布代码的时候,瞌睡了,忘了这个文件了)。
解决方法一:在别的地方找到这个文件,现在将里面的代码贴出来,用时,新建一个c源文件,代码贴如即可。
#include <winsock2.h> #include <windows.h> #include <stdlib.h> #include <stdio.h> #include "event2/event.h" #include "event2/util.h" #include "event2/thread.h" #define E(x) printf (#x " -> \"%s\"\n", evutil_socket_error_to_string (x)); int main (int argc, char **argv) { int i, j; const char *s1, *s2; evthread_use_windows_threads (); s1 = evutil_socket_error_to_string (WSAEINTR); for (i = 0; i < 3; i++) { printf ("\niteration %d:\n\n", i); E(WSAEINTR); E(WSAEACCES); E(WSAEFAULT); E(WSAEINVAL); E(WSAEMFILE); E(WSAEWOULDBLOCK); E(WSAEINPROGRESS); E(WSAEALREADY); E(WSAENOTSOCK); E(WSAEDESTADDRREQ); E(WSAEMSGSIZE); E(WSAEPROTOTYPE); E(WSAENOPROTOOPT); E(WSAEPROTONOSUPPORT); E(WSAESOCKTNOSUPPORT); E(WSAEOPNOTSUPP); E(WSAEPFNOSUPPORT); E(WSAEAFNOSUPPORT); E(WSAEADDRINUSE); E(WSAEADDRNOTAVAIL); E(WSAENETDOWN); E(WSAENETUNREACH); E(WSAENETRESET); E(WSAECONNABORTED); E(WSAECONNRESET); E(WSAENOBUFS); E(WSAEISCONN); E(WSAENOTCONN); E(WSAESHUTDOWN); E(WSAETIMEDOUT); E(WSAECONNREFUSED); E(WSAEHOSTDOWN); E(WSAEHOSTUNREACH); E(WSAEPROCLIM); E(WSASYSNOTREADY); E(WSAVERNOTSUPPORTED); E(WSANOTINITIALISED); E(WSAEDISCON); E(WSATYPE_NOT_FOUND); E(WSAHOST_NOT_FOUND); E(WSATRY_AGAIN); E(WSANO_RECOVERY); E(WSANO_DATA); E(0xdeadbeef); /* test the case where no message is available */ /* fill up the hash table a bit to make sure it grows properly */ for (j = 0; j < 50; j++) { int err; evutil_secure_rng_get_bytes(&err, sizeof(err)); evutil_socket_error_to_string(err); } } s2 = evutil_socket_error_to_string (WSAEINTR); if (s1 != s2) printf ("caching failed!\n"); libevent_global_shutdown (); return EXIT_SUCCESS; }解决方法二:找到makefile文件中,关于print-winsock-erros.c编译的语句,清除掉即可。
这个问题,应该不是问题。libevent不会出这么明显的错误,或许你用的时候,就没有这个错误了,他们已经把这个文件补上去了。
使用示例
1.新建项目
新建一个控制台“空”项目
2 拷贝文件
2.1 在项目目录下建一个libevent文件夹2.2 在libevent中新建一个lib文件夹,将上面三个lib文件copy到该目录下。
2.3 在libevent中再新建一个include文件夹,
将libevent-2.0.22-stable\include下的文件和文件夹copy到该目录下,
将libevent-2.0.22-stable\WIN32-Code下的文件和文件夹copy到该目录下,
2个event2目录下的文件合并一起。
3 项目配置
VC++目录:包含目录,添加刚刚新建的include目录
库目录,添加刚刚的lib目录;
C/C++:
代码生成-->运行库:
Debug模式下选:多线程调试 (/MTd),
Release下模式下选:多线程 (/MT)
连接器:
输入->附加依赖项:
ws2_32.lib
wsock32.lib
libevent.lib
libevent_core.lib
libevent_extras.lib
另外两个库ws2_32.lib和wsock32.lib是用来编译Windows网络相关的程序库。
4 测试代码
4.1 新建一个main.c文件4.2 从libevent-2.0.22-stable\sample目录下拷贝time-test.c文件中的代码到main中,测试运行即可
相关文章推荐
- 运行VS2013编译成功后出现:无法启动程序“.exe” 系统找不到指定文件的问题的解决方法
- 关于VS2013 MFC单文档菜单项设置复选框的出现的问题以及处理方法
- vs2013 编译libevent以及出现的问题
- 在WIN10系统下运行VS2013编译成功后出现:无法启动程序“.exe” 系统找不到指定文件的问题的解决方法
- vs2013编译 protoBuffer编译出现的问题
- C++/Qt程序编译运行时出现的问题以及解决办法
- VS2013编译由VS2010创建的项目时出现“转换到coff期间失败”的错误
- vim7.4官方源码在vs2013的编译方法及问题总结
- 在vs2013下出现编译错误:“buiding an mfc project for an non-unicode”
- VS中编译64位程序以及遇到的问题(E0000235)
- 在32位系统计算机上编写的程序 (工具vs2013/2010),在64位操作系统上运行时出现缺少.dll和0x000007b错误的问题
- VS2013 编译libevent 并且使用!
- VS2013配置opencv出现msvcp110d.dll丢失问题解决办法
- VS代码编译能通过,但是出现红色波浪线的问题
- 关于孙鑫课程第14课网络编程使用VS2013 inet_addr,inet_ntoa出现的问题
- OGRE 2.1 使用VS2015编译的过程以及问题的解决
- vs2013出现error C4996问题
- vs2013编译程序不能在xp上运行的问题
- win7 + VS2013 出现Cannot open include file: 'SDKDDKVer.h'问题 附地址
- VS 2013 with update 5 编译程序出现A task was cancel