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.总结

像这种无定义的方法的引用,出现的问题只有两种情况:

  • 找不到对应的库文件
  • 找不到对应的头文件

所以需要自己进行指定头文件和库文件(动态库或静态库),麻烦的就是这点!

posted @ 2021-07-09 10:07  muxisuibi  阅读(825)  评论(0编辑  收藏  举报