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.總結

像這種無定義的方法的引用,出現的問題只有兩種情況:

  • 找不到對應的庫文件
  • 找不到對應的頭文件

所以需要自己進行指定頭文件和庫文件(動態庫或靜態庫),麻煩的就是這點!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM