CentOS7.6 源碼安裝 libevent-2.1.8-stable

来源:https://www.cnblogs.com/yunfan1024/archive/2020/06/04/13039654.html
-Advertisement-
Play Games

獲取libevent libevent官網:https://libevent.org/ GitHub-libevent項目鏈接:https://github.com/libevent/libevent 要獲取libevent源碼包,可以在上面兩個網址鏈接上獲取到。本人下載的是libevent-2.1 ...


獲取libevent

libevent官網:https://libevent.org/

GitHub-libevent項目鏈接:https://github.com/libevent/libevent

要獲取libevent源碼包,可以在上面兩個網址鏈接上獲取到。本人下載的是libevent-2.1.8-stable版本,源碼包文件名為:libevent-2.1.8-stable.tar.gz。

《註意》安裝需要有root許可權,最好是在root用戶下進行,如果不是root用戶,執行編譯安裝操作時需要在命令前加上 sudo 。本人是在root用戶下進行操作的。

安裝步驟

一、解壓縮源碼包。

tar -xzvf libevent-2.1.8-stable.tar.gz

 二、進入libevent-2.1.8-stable目錄,執行 configure 配置腳本

 1、查看configure 腳本的使用幫助及其選項,可以執行命令:./configure --help 查看。

如果直接執行:./configure,那麼預設安裝路徑是/usr/local,對應的頭文件、可執行文件和庫文件分別對應的目錄是:'/usr/local/include'、'/usr/local/bin','/usr/local/lib'。

2、我本人設置了自定義安裝路徑,執行命令如下:

./configure --prefix=/usr/local/libevent

 3、第2步執行成功後,會生成Makefile文件,然後使用make命令進行源碼編譯。

make

 4、編譯成功後,執行安裝命令。

make install

 5、進入/usr/local目錄下,可以看到一個libevent目錄,查看下這個目錄的樹形結構。

[root@centos7 local]# tree -L 3 libevent/
libevent/
├── bin
│   └── event_rpcgen.py
├── include
│   ├── evdns.h
│   ├── event2
│   │   ├── buffer_compat.h
│   │   ├── bufferevent_compat.h
│   │   ├── bufferevent.h
│   │   ├── bufferevent_ssl.h
│   │   ├── bufferevent_struct.h
│   │   ├── buffer.h
│   │   ├── dns_compat.h
│   │   ├── dns.h
│   │   ├── dns_struct.h
│   │   ├── event_compat.h
│   │   ├── event-config.h
│   │   ├── event.h
│   │   ├── event_struct.h
│   │   ├── http_compat.h
│   │   ├── http.h
│   │   ├── http_struct.h
│   │   ├── keyvalq_struct.h
│   │   ├── listener.h
│   │   ├── rpc_compat.h
│   │   ├── rpc.h
│   │   ├── rpc_struct.h
│   │   ├── tag_compat.h
│   │   ├── tag.h
│   │   ├── thread.h
│   │   ├── util.h
│   │   └── visibility.h
│   ├── event.h
│   ├── evhttp.h
│   ├── evrpc.h
│   └── evutil.h
└── lib
    ├── libevent-2.1.so.6 -> libevent-2.1.so.6.0.2
    ├── libevent-2.1.so.6.0.2
    ├── libevent.a
    ├── libevent_core-2.1.so.6 -> libevent_core-2.1.so.6.0.2
    ├── libevent_core-2.1.so.6.0.2
    ├── libevent_core.a
    ├── libevent_core.la
    ├── libevent_core.so -> libevent_core-2.1.so.6.0.2
    ├── libevent_extra-2.1.so.6 -> libevent_extra-2.1.so.6.0.2
    ├── libevent_extra-2.1.so.6.0.2
    ├── libevent_extra.a
    ├── libevent_extra.la
    ├── libevent_extra.so -> libevent_extra-2.1.so.6.0.2
    ├── libevent.la
    ├── libevent_pthreads-2.1.so.6 -> libevent_pthreads-2.1.so.6.0.2
    ├── libevent_pthreads-2.1.so.6.0.2
    ├── libevent_pthreads.a
    ├── libevent_pthreads.la
    ├── libevent_pthreads.so -> libevent_pthreads-2.1.so.6.0.2
    ├── libevent.so -> libevent-2.1.so.6.0.2
    └── pkgconfig
        ├── libevent_core.pc
        ├── libevent_extra.pc
        ├── libevent.pc
        └── libevent_pthreads.pc

5 directories, 56 files

 可以看到libevent目錄下有3個一級子目錄:bin/,include/ 和 lib。下麵分別作簡要的介紹:

bin/:這個目錄下存放的是可執行文件,可以看到是一個event_rpcgen.py腳本文件,具體功能是什麼目前還不清楚。

include/:這個目錄下存放的是libevent三方庫的頭文件,它下麵還有個子目錄:event2/,存放的是支持libevent-2.x版本的頭文件,以示區別libevent-1.x版本。因為libevent-1.x版本和libevent-2.x版本的變化有點大,為了向下相容低版本的libevent,所以添加了event2這個子目錄。當在程式中要用到libevent-2.x版本的某些頭文件時,使用#include巨集命令包含頭文件的方式,舉例如下:

#include <event2/bufferevent.h>
#include <event2/buffer.h>
#include <event2/listener.h>
#include <event2/util.h>
#include <event2/event.h>
#include <event2/thread.h>

lib/:lib目錄存放的是libevent的庫文件,包括靜態庫、動態庫文件等文件。lib目錄下還有一個子目錄pkgconfig/,該子目錄下的xxx.pc文件用於pkg-config工具的使用,具體用法這裡不作說明瞭,這個工具可以幫助程式的源碼編譯工作。對應的環境變數是PKG_CONFIG_PATH,通過配置這個環境變數,在編譯的時候編譯器就可以找到所依賴的頭文件和庫文件。配置方法會在下麵說明。pkgconfig目錄下有4個.pc文件,這四個.pc文件對應著4個libevent庫模塊。

libevent_core.pc                       # libevent核心模塊
libevent_extra.pc                      # libevent擴展模塊
libevent.pc                                # libevent基礎模塊
libevent_pthreads.pc                # libevent多線程模塊

查看其中一個.pc文件的內容,# more libevent_core.pc

#libevent pkg-config source file

prefix=/usr/local/libevent
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

Name: libevent_core
Description: libevent_core
Version: 2.1.8-stable
Requires:
Conflicts:
Libs: -L${libdir} -levent_core
Libs.private:
Cflags: -I${includedir}

 至此,libevent-2.1.8三方庫安裝成功了。但是,要使用libevent庫進行應用程式的開發工作,還需要配置libevent三方庫的開發環境。

配置libevent的開發環境

  這裡,我只說明最常見的配置三方庫的使用環境,即通過配置相關環境變數的方式。具體方法是:在當前用戶的home目錄下的.bashrc 或者 .bash_profile配置文件中配置libevent庫的使用環境。本人是在 .bash_profile 文件下配置相關環境變數的值的。

1、配置C語言頭文件的搜索路徑,對應的環境變數是C_INCLUDE_PATH ,C++頭文件的環境變數是CPLUS_INCLUDE_PATH

]$ vim ~/.bash_profile    #添加內容如下:
#Add C header file path
export C_INCLUDE_PATH=/usr/local/libevent/include:$C_INCLUDE_PATH

 保存成功後,執行:source ~/.bash_profile,令修改生效,下同。查看C_INCLUDE_PATH 環境變數的值:echo $C_INCLUDE_PATH

2、配置庫文件的搜索路徑,對應的環境變數是:LIBRARY_PATHLD_LIBRARY_PATH。添加內容如下:

# Add third_lib path
export LD_LIBRARY_PATH=/usr/local/libevent/lib:$LD_LIBRARY_PATH
export LIBRARY_PATH=/usr/local/libevent/lib:$LIBRARY_PATH

 可能有人要問了,為什麼 LD_LIBRARY_PATHLIBRARY_PATH 配置的值是一樣的,是不是多此一舉呢?這裡我解釋一下,之前我在安裝ZeroMQ三方庫的時候,只配置了LD_LIBRARY_PATH這一個環境變數,但是在編譯的時候仍然報了錯誤,錯誤描述信息如下:

/usr/bin/ld: cannot find -lzmq
collect2: error: ld returned 1 exit status

後來,我去技術問答網站尋求幫助,發現還需要配置 LIBRARY_PATH 這個環境變數,配置了這個環境變數之後,編譯就通過了。這兩個環境變數還是有所區別的,因此建議都加上。

3、嘗試編譯一個libevent程式,源文件名為:libevent_version.c,源碼如下:

#include <stdio.h>
#include <event.h>

int main()
{
  printf("The current libevent version is %s\n",event_get_version());
  return 0;
}

編譯命令: gcc libevent_version.c -o libevent_version -levent

運行結果:The current libevent version is 2.1.8-stable

<分析> 可以看到,編譯運行通過了,因此我們的libevent三方庫的使用環境設置是沒有問題的。

【參考】

環境變數:LIBRARY_PATH 和 LD_LIBRARY_PATH的區別

使用 pkg-config 方式配置三方庫的搜索路徑

  在編寫多文件項目或者大型項目的軟體開發時,我們編譯整個項目一般都是通過編寫Makefile文件,使用make命令來編譯的。在GCC編譯階段需要包含#include巨集指令指定的頭文件,在鏈接階段又需要連接相應的庫文件,由於頭文件的搜索路徑和庫文件的搜索路徑是相互獨立的,這就可能帶來一個問題:頭文件搜索路徑下的頭文件和庫文件搜索路徑下的庫文件可能不是對應同一個三方庫的版本。比如說,頭文件搜索路徑下的頭文件是libevent-1.14.14b版本的,而庫文件搜索路徑下的庫文件是libevent-2.1.8版本的,這就帶來了版本的不一致性了,在編譯的時候可能會報錯,或者說編譯可以通過,但是在程式運行時可能會出現意想不到的錯誤,這就比較嚴重了,並且你還不好查錯。

  pkg-config工具正好可以解決上面遇到的編譯鏈接不統一的問題。它的工作原理這裡我就不作說明瞭,下麵具體說明如何配置和使用pkg-config工具。以libevent為例來說明。

1、要使用pkg-config工具來設置三方庫的搜索路徑,需要配置一個環境變數PKG_CONFIG_PATH,配置值是xxx.pc文件的絕對路徑。

]$ vim ~/.bash_profile
#Add pkg-config path
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

 我這裡使用的xxx.pc文件的路徑是:/usr/local/lib/pkgconfig,這個路徑是可以自定義的。修改保存後,執行:source ~/.bash_profile,令修改生效。

2、上文中我們提到,libevent的安裝路徑下的bin/pkgconfig目錄下有4個.pc文件,我們將這4個.pc文件複製到配置路徑下。

]# cd /usr/local/libevent/lib/pkgconfig/;ls
libevent_core.pc  libevent_extra.pc  libevent.pc  libevent_pthreads.pc
]# cp *.pc /usr/local/lib/pkgconfig

 3、配置完成後,我們使用pkg-config 的方式來編譯一下libevent_version.c這個源程式,編譯命令如下:

gcc `pkg-config --cflags --libs libevent` libevent_version.c -o libevent_version

 <說明> --cflags 參數,可以給出編譯時所需的頭文件搜索路徑。--libs 參數,可以給出編譯時所需的庫文件搜索路徑。libevent 對應的是 /usr/local/lib/pkgconfig目錄下的libevent.pc文件。同時,可以註意到我們的編譯命令並沒有加 -levent 參數,但是加上也無妨。

<Tips> 建議在編寫Makefile文件中,使用 pkg-config 的方式來設置三方庫的開發環境,這樣可以減少和規避潛在的開發風險。

【參考】

簡述configure、pkg-config、pkg_config_path三者的關係

總結

   至此,libevent-2.1.8三方庫的源碼安裝和開發環境配置就完成了,接下來就可以使用libevent庫來進行應用程式的開發工作了。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 文章篇幅較長,閱讀完大概20min,建議收藏閱讀, 讀完會有收穫。歡迎點贊關註 原文鏈接:https://www.softwaretestinghelp.com/types-of-software-testing/ 有多少軟體測試類型呢? 我們作為測試人員瞭解很多種不同的軟體測試類型,例如功能測試( ...
  • 1.先停止資料庫伺服器 service mysqld stop 2.vim /etc/my.cnf 3.配置文件添加skip-grant-tables [root@VM_0_8_centos ~]# vim /etc/my.cnf # For advice on how to change sett ...
  • 1.linux常用命令及其參數 1.1 ls相關,文件與目錄的檢視 基本用法:ls [-options] 文件或者目錄名稱 ls [--color={never, auto, always}] 文件名或者目錄名稱 ls [--full-time] 文件名或目錄名稱 選項與參數: -a : 全部的文件 ...
  • 1. linux文件許可權和幾種表示方法 文件長度大約最大為255bytes或128個漢字字元 linux文件許可權有幾種表示方法: 使用ls -al 即可查詢到目錄的許可權內容: 2.文件許可權說明: 格式為: drwxr-xr-x o 第一組為『文件擁有者可具備的許可權』,以『initial-setup- ...
  • 基於阿裡雲代理設置centos鏡像,安裝docker,設置ntp;基於daocloud安裝docker-comspoe ...
  • 現在信息泄露越來越嚴重,而強大的密碼是防止個人敏感信息泄露的第一步。良許曾經分享過一篇文章,如何判斷你的密碼是否足夠安全,點擊以下鏈接查看: 信息泄漏時代,如何讓自己的密碼更安全? 在生活中,我們需要用到大量的密碼,這些密碼最好不要統一,否則萬一泄漏的話,所有賬號都暴露在風險之下。而在工作中,我們同 ...
  • 1、Keepalived軟體前期用來管理並監控LVS集群系統中各個服務節點的狀態;2、後期加入了實現高可用的VRRP功能。因此可以為lvs負載均衡提供高可用功能,也可以為其他服務提供高可用。。實驗鏡像:Centos 8.1.1911草圖:(待補)1、兩個real server 安裝配置在keepal... ...
  • 痞子衡最近這段時間在參與一個基於i.MXRT1170的大項目(先保個密),需要做一個開機動畫功能,板子連接的LCD屏解析度是1280x480,因為開機動畫要求達到30fps,並且要畫質清晰,如果是從SD卡裡讀mp4或者jpeg去解碼,這麼高解析度的圖像(暫不考慮低解析度的圖片再用PXP模塊去拉伸的方... ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...