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.總結
像這種無定義的方法的引用,出現的問題只有兩種情況:
- 找不到對應的庫文件
- 找不到對應的頭文件
所以需要自己進行指定頭文件和庫文件(動態庫或靜態庫),麻煩的就是這點!