VS2017编译支持openssl的libevent源码

最近在做一个项目,微信登录功能,以前是网站来完成微信账号注册,奈于公司人员架构上无法实现此功能,转由服务器来实现。方法多种多样。

1)libcurl简单明了,然后select来实现异步,如果要求更高者高并发,可以用epoll来完成。

2)libevent+openssl(为什么要用openssl呢,微信请求后台验证网址https,如果请求是http的那么可以不需要编译带openssl的libevent库,当然上面libcurl也是同样需要openssl库来支持https请求的)

当然这2种方法均已实现(惭愧,对libevent不了解,为了项目进度先用libcurl熟悉的code来完成),由于项目是基于libevent库的,还时删除libcurl库,用libevent来完善支持吧。

言归正传,本文主要解决的是如何编译出libevent库,已经编译出支持openssl安全加密协议的libevent库

一、下载源码(http://libevent.org/)解压

1)本文下载为2.1.8版本

https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz

2)文件结构如下所示

VS2017编译支持openssl的libevent源码_第1张图片

三、VS2017编译libevent库

1)新建空项目

VS2017编译支持openssl的libevent源码_第2张图片

2)修改项目属性(当然根据自己项目需要选择)

VS2017编译支持openssl的libevent源码_第3张图片

3)复制libevent文件里的源代码文件至新建工程项目中

这一步还是挺多地方要注意,没关系我们一步步解决错误

1、我们把复制过来的.c文件全部鼠标拖至新建工程源文件中

VS2017编译支持openssl的libevent源码_第4张图片

2、同样的方法把.h文件拖至头文件中

3、当然我们还有几个头文件没加入,我们先编译下,等提示出错,再解决。

VS2017编译支持openssl的libevent源码_第5张图片

4、编译

5、编译错误提示

(1)error C2061: 语法错误: 标识符“HCRYPTPROV”

arc4random.c(55):#include

VS2017编译支持openssl的libevent源码_第6张图片

既然报错,那么先把arc4random.c文件从项目排除,注意是排除不是删除。

(2)fatal error C1083: 无法打开包括文件: “event2/event-config.h”: No such file or directory

把include文件拷贝至新项目中,WIN32-Code\nmake\event2里的event-config.h拷贝新项目include/event2/中

(3)fatal error C1083: 无法打开包括文件: “sys/queue.h”: No such file or directory

把compat文件拷贝至新项目中,同时改变项目属性

(4)evthread_pthread.c(32): fatal error C1083: 无法打开包括文件: “pthread.h”: No such file or directory

哪个文件报linux头文件找不到,我们就删哪个.c文件,删除evthread_pthread.c

VS2017编译支持openssl的libevent源码_第7张图片

(5)evutil.c(1968): error C4996: 'sscanf': This function or variable may be unsafe. Consider using sscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

添加预定义,编译器提升的好处是,不安全函数都将变为错误提示。

(6)buffer.c(3107): error C4996: 'read': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _read. See online help for details.

提示的意思是:read名字换成_read,真是有点意思,改源码吧。下面的close换成_close。

(7)bufferevent_openssl.c(66): fatal error C1083: 无法打开包括文件: “openssl/bio.h”: No such file or directory

我们先把这个文件排除把,这个文件就是支持openssl文件,如果不需要ssl安全加密,那么可以删除。

(8)epoll_sub.c(30): fatal error C1083: 无法打开包括文件: “sys/param.h”: No such file or directory

同上错误4,直接删除epoll_sub.c

VS2017编译支持openssl的libevent源码_第8张图片

(9)evdns.c(3821): error C4996: 'GetVersion': 被声明为已否决

直接添加#pragma   warning(disable: 4996)来忽略

(10) error LNK2019: 无法解析的外部符号 __imp__ioctlsocket@12,该符号在函数 _get_n_bytes_readable_on_socket 中被引用

6、最后编译出来dll库

VS2017编译支持openssl的libevent源码_第9张图片

至此我们就编译出来了dll库了,太辛苦了,这么多错误,一个一个解决,其实还是很简单,当然你们以为这样就完了!

四、检查dll库的有效性

1)编译出来dll,发现少了lib,这个简单。直接添加一个.def,项目创建后会自动引用,这样编译就会出现.lib

VS2017编译支持openssl的libevent源码_第10张图片

2)使用,发现还是有问题,无法解析的外部符号

(1)明明编译出来了,lib和dll,还是这样!其实对于库敏感的程序员,这个库是不是没有导出啊,怎么大小才2KB

(2)我们来看看lib导出函数符号都有哪些吧

VS2017编译支持openssl的libevent源码_第11张图片

可以看看,空空如也。

(3)原因是没有导出任何函数,加上宏定义event_EXPORTS导出

(4)再次编译结果

VS2017编译支持openssl的libevent源码_第12张图片

此时函数链接符号就全部打印出来了

VS2017编译支持openssl的libevent源码_第13张图片

五、编译支持SSL的libevent库

上一步,我们在编译错误提示的第七步,排除了bufferevent_openssl.c文件,这次我们添加回来

报错:bufferevent_openssl.c(66): fatal error C1083: 无法打开包括文件: “openssl/bio.h”: No such file or directory

OpenSSL库编译也很麻烦,这里就直接安装exe文件

VS2017编译支持openssl的libevent源码_第14张图片

把include lib文件引入即可

VS2017编译支持openssl的libevent源码_第15张图片

至此就编译出支持OpenSSL的libevent库了

 

你可能感兴趣的:(VS2017编译支持openssl的libevent源码)