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__

  • 本文作者: 慕兮随笔
  • 本文链接: https://www.cnblogs.com/muxisuibi/p/14989329.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。