在win10的vs2019上安装并编译libevent库
在win10的vs2019上安装并编译libevent库
写在前面:
菜鸡的我第一次接触 libevent 库,对他一点也不了解,只想先搞一个最简单的程序能跑起来就行。为此搜了无数个教程,但都会在使用 nmake 编译的那一步down掉。不过最后在我无数次的尝试下,终于弄好了。
编译环境:
1、win10 64位
2、vs2019中文版(vs命令提示符的名字是英文)
3、libevent 2.1.11
4、libevent解压的文件夹目录为:“D:\software\libevent-2.1.11-stable”(这个因人而异,可以改)
借鉴了两个大神的博客:这个博客借鉴前8步,这个博客借鉴步骤二和步骤三,非常感谢这两个大神。
-
点击前往官网下载,进去之后很容易就找到, 我下载的是 libevent-2.1.11-stable 版本。下载完成之后进行解压。
-
修改 libevent 目录下的 Makefile.nmake 文件:(libevent目录指的就是刚刚解压的那个目录(我的是:“D:\software\libevent-2.1.11-stable”),可以找一个格式的地方,放进去)
找到 CFLAGS=$(CFLAGS) /Ox /W3 /wd4996 /nologo,再后面加上 /Zi
即 CFLAGS=$(CFLAGS) /Ox /W3 /wd4996 /nologo /Zi
官方说明:务必加上最后一个选项方便调试(我也不懂) -
修改 libevent 目录下的 Makefile.nmake 文件
将 LIBFLAGS=/nologo
修改为:LIBFLAGS=/nologo /MACHINE:X64
修改完成之后,保存退出。 -
打开 libevent 目录下的 mm-internal.h 添加 #include <stdint.h>,(在开头加就行)
-
在自己的电脑上找到 x64 Native Tools Command Prompt for VS 2019 ,这个应用程序,(就是vs下的命令提示符)
-
使用控制台命令进入到 libevent 目录下
-
执行命令 nmake /f Makefile.nmake,(成功的时候只有几行输出,要是碰见输出很多行,说什么变量转换可能导致数据丢失这些话,都说明编译失败,就算是真的生成了三个 lib 文件,也是失败的。得重新找别的教程,教程有很多,基本路线都差不多,但是具体内容的差别还是很大的。如果这里不行就请绕道。手动狗头)
这是成功的截图(只有几行提示), 失败的图没有截,因为当时烦的要死。
-
成功后,在 libevent 目录下会生成三个文件
libevent.lib
libevent_core.lib
libevent_extras.lib
到这里,libevent 的部分就完成了,接下来是将这个库导入到vs里。 -
在 vs 里新建项目,这步没什么要求。
-
依次打开 项目 —> 项目属性(就是项目名+属性,这一步没法截图),
进入这个界面
-
配置 选择 所有配置,在 配置属性 下点击 VC++目录,编辑 包含目录 和 库目录
-
在 包含目录 下添加 libevent 目录下的 include 文件夹和 libevent 目录下 WIN32-Code 目录下的 nmake 文件夹
-
在 库目录 下添加 libevent 目录
-
最后结果如下
-
依次选择 配置属性 —> 链接器 —> 输入 —> 附加依赖项 ,添加如下 lib 文件:
libevent.lib
libevent_core.lib
libevent_extras.lib
结果如下: -
点击 确定 完成所有配置。
-
使用一个非常简单的代码测试一下是否成功
/************************************
* 每隔两秒在控制台输出"Hello World!"
*************************************/
#include "event.h"
#include <iostream>
#include <winsock.h>
#pragma comment(lib,"ws2_32.lib")
void OnTime(int sock, short event_value, void* arg){
std::cout << "Hello World!\n";
timeval tv;
tv.tv_sec = 1;
tv.tv_usec = 0;
event_add((struct event*)arg, &tv);
}
int main(){
WSADATA wsaData;
if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0) {
return -1;
}
event_init();
struct event ev_time;
evtimer_set(&ev_time, OnTime, &ev_time);
struct timeval tv;
tv.tv_sec = 1;
tv.tv_usec = 0;
event_add(&ev_time, &tv);
event_dispatch();
WSACleanup();
return 0;
}
如果成功的话,控制台就会每隔两秒输出一个 “Hello World!”
到这里配置和测试就完美结束了!!!
如何区别 C++代码是 linux 端还是 windows 端?
答:看头文件
如果是 #include <winsock.h> 的就是 windows 端;
如果是 #include<sys/socket.h> 的就是 linux 端。
写在最后
之前一直拿着 linux 端的代码在 win10 上运行, 我说怎么有的代码成功了,有的就报错。真的是太蠢了。
下一篇(如果有的话)会介绍两个客户端和一个服务器端的相关代码
最后非常感谢那两个大神的博客。
上一篇: ofbiz学习——分类
下一篇: ofbiz学习——选择目录