Libevent2.1.8版在Liunx中编译安装遇到的问题
Libevent2.1.8 版在 Liunx 中编译安装遇到的问题
前言:在网上找了很久,都没有一个明确的解决方法,通过分析可能的原因,将自己实际操作及解决的成功结果记录如下,以供遇到相似的问题,能提供思路!
1. 安装编译 Libevent 的流程
## 第一步: 生成 configure 配置文件
./autogen.sh
## 第二步:生成 Makefile
./configure
## 第三步:安装编译
make
make install
2.make 后出现如下报错信息
3. 分析原因
分析一:可能是 libevent_openssl.so 的动态库没找到
于是安装 openssl.so, 使用的版本是 1.1.1,最好对应 libevent2.1.8, 避免不必要的麻烦,当然熟悉了,随便用那个版本,只有能编译通过,正常使用就行。
安装 openssl1.1.1 的步骤:
.config shared --prefix=/usr/local/ --openssldir=/usr/local/openssl
说明:可以通过./Configure --help
查看使用说明; 如果 libevent 中要使用 openssl 模块,则先安装 openssl。
指定动态库路径:
将 openssl 生成的动态库指定到 /usr/local/lib 目录下,重新编译 libevent:
make clean
make
结果:还是出现上图所示的错误信息
分析二:没有找到 openssl 的头文件,所以无法使用动态库中的方法
从报错信息中看,是sample/le-proxy.c
编译出的错,那我们找到 sample 目录下的include.am
文件:
我们看 OPENSSL_INCS 对应的目录是啥,在 libevent 的安装目录下,打开 Makefile 查看:
没有加载,说明头文件是在当前目录下的头文件中,我们在 libevent 的 include 目录下查看:
发现没有 openssl 对应的头文件,所以才会找不到 openssl 动态库中的方法。
4. 解决方法
将安装的 openssl 和解压的 libevent 下的 include 目录做个软链接
ln -s /usr/local/include/openssl /root/libevent-master/include/openssl
然后再编译 libevent:
make
make install
可发现,已经编译成功!
5. 编写简单的测试程序,测试 libevent
#include <event2/event.h>
#include <iostream>
using namespace std;
int main(){
cout << "test libevent!\n";
event_base *base = event_base_new();
if(base){
cout << "event_base_new success!" << endl;
}
return 0;
}
编译链接,报如下错:
- 首先查找库文件是否存在
find / -name libevent-2.2.so.1
- 结果发现在
- 建立软链接:
ln -s /usr/local/lib/libevent-2.2.so.1 /usr/lib64/libevent-2.2.so.1
编译结果:
6. 总结
像这种无定义的方法的引用,出现的问题只有两种情况:
- 找不到对应的库文件
- 找不到对应的头文件
所以需要自己进行指定头文件和库文件(动态库或静态库),麻烦的就是这点!
__EOF__
