編譯環境:deepin 15.11桌面版
nghttp2下載地址:https://github.com/nghttp2/nghttp2
環境要求
emm只能在類Linux環境才能完整編譯,想在Windows裡面使用只能編譯成dll,再進行引用開發使用,不能直接搞。
構建libnghttp2庫需要一下包:
- pkg-config >= 0.20
要構建和執行單元測試曾想,需要以下包:
- cunit>=2.1
要構建文件,你需要安裝:
- sphinx(http://sphinx-doc.org)
如果你只需要libnghttp2庫,那麼上面的軟體包就是你需要安裝的,使用--enable-lib-only ,以確保只有libnghttp2構建。這避免了與構建捆綁應用程式相關的潛在的構建錯誤。
要構建並執行應用程式(nghttp
,nghttpd
, nghttpx
和h2load
在)src
目錄,需要以下包:
- OpenSSL> = 1.0.1
- libev> = 4.11
- zlib> = 1.2.3
- libc-ares> = 1.7.5
ALPN支援需要OpenSSL>=1.0.2(2015年1月22日釋出),可以使用LibreSSL>=2.2.0代替OpenSSL,但在編寫時OpenSSL比LibreSSL具有更多功能。
要啟用-a
選項(從下載的資源獲取連結的資源)nghttp
,需要以下包:
- libxml2> = 2.6.26
要在nghttpx中啟用systemd支援,需要以下包:
- libsystemd-dev> = 209
HPACK工具需要以下包:
- jansson> = 2.5
要在examples目錄下構建原始碼,需要libevent:
- libevent-openssl> = 2.0.8
為了緩解長時間執行的伺服器程式(nghttpd
和nghttpx
)中的堆碎片,建議使用jemalloc:
-
jemalloc
注意
由於受到限制,Alpine Linux目前不支援malloc替換。檢視問題#762中的詳細資訊。
libnghttp2_asio C ++庫需要以下包:
- libboost-dev> = 1.54.0
- libboost-thread-dev> = 1.54.0
Python繫結需要以下包:
- cython> = 0.19
- python> = 2.7
- python-setuptools
我的環境是DEEPIN基於Ubuntu,so屬於‘大便’系列。
安裝下面的這些需要的包吧
sudo apt-get install g++ make binutils autoconf automake autotools-dev libtool pkg-config \ zlib1g-dev libcunit1-dev libssl-dev libxml2-dev libev-dev libevent-dev libjansson-dev \ libc-ares-dev libjemalloc-dev libsystemd-dev \ cython python3-dev python-setuptools
要為nghttpx啟用mruby支援,需要mruby。我們需要使用C ++ ABI明確開啟來構建mruby,並且可能需要其他mrgem,mruby由第三方/ mruby目錄下的git子模組管理。目前,預設情況下禁用對nghttpx的mruby支援。要啟用mruby支援,請使用--with-mruby
configure選項。請注意,在撰寫本文時,Debian / Ubuntu中的libmruby-dev和mruby包不能用於nghttp2,因為它們不啟用C ++ ABI。要構建mruby,需要以下包:
- ruby
- bison
nghttpx支援OpenSSL / LibreSSL的永不過時的特權分離引擎。簡而言之,當像Heartbleed這樣的嚴重漏洞被利用時,它可以最大限度地降低私鑰洩漏的風險。預設情況下禁用。要啟用它,請使用--with-neverbleed
configure選項。
編譯libnghttp2 C原始碼需要C99編譯器。已知gcc 4.8就足夠了。為了編譯C ++原始碼,需要gcc> = 6.0或clang> = 6.0。C ++原始碼需要C ++ 14語言功能。
注意:
要在nghttpx中啟用mruby支援,請使用--with-mruby
configure選項。
注意
Mac OS X使用者可能需要--disable-threads
configure選項來禁用nghttpd,nghttpx和h2load中的多執行緒以防止它們崩潰。歡迎使用補丁程式在Mac OS X平臺上進行多執行緒處理。
注意
要編譯關聯的應用程式(nghttp,nghttpd,nghttpx和h2load),必須使用--enable-app
configure選項並確保滿足上面指定的要求。通常,配置指令碼檢查所需的依賴項以構建這些應用程式,並--enable-app
自動啟用,因此您不必顯式使用它。但是,如果您發現應用程式未構建,那麼使用--enable-app
可能會找到原因,例如缺少依賴項。
注意
為了檢測第三方庫,使用了pkg-config(但是我們不對某些庫使用pkg-config(例如,libev))。預設情況下,pkg-config *.pc
在標準位置搜尋檔案(例如,/ usr / lib / pkgconfig)。如果需要*.pc
在自定義位置使用 檔案,請指定PKG_CONFIG_PATH
環境變數的路徑 ,並將其傳遞給configure指令碼,如下所示:
$ ./configure PKG_CONFIG_PATH=/path/to/pkgconfig
對於pkg配置管理庫,*_CFLAG
和*_LIBS
環境變數的定義(例如,OPENSSL_CFLAGS
, OPENSSL_LIBS
)。為這些變數指定非空字串會完全覆蓋pkg-config。換句話說,如果指定了它們,則不會將pkg-config用於檢測,並且使用者有責任為這些變數指定正確的值。有關這些變數的完整列表,請執行./configure -h
。
從釋出tar存檔構建nghttp2
nghttp2專案定期釋出tar檔案,其中包括nghttp2原始碼和生成的構建檔案。可以從“ 版本”頁面下載它們。
從git構建nghttp2需要autotools開發包。從tar檔案構建不需要它們,因此它更容易。通常的構建步驟如下:
$ tar xf nghttp2-XYZtar.bz2 $ cd nghttp2-XYZ $ ./configure $ make
從git構建
這是重點
sudo apt install auto-apt #也可直接安裝deb包 #http://mirrors.edge.kernel.org/ubuntu/pool/universe/a/auto-apt/auto-apt_0.3.24_amd64.deb #木的辦法,奇葩的事情總會有很多 sudo apt install checkinstall sudo apt install libboost-dev sudo apt install libboost-all-dev git submodule update --init autoreconf -i automake autoconf auto-apt run ./configure --enable-app make sudo checkinstall -D -install=no --pkgversion=1.0 --pkgname=nghttp2-tools make install # 製作deb包 # 更多checkinstall用法請自行查詢 #dpkg 安裝deb包 dpkg -i package-file-name #dpkg 解除安裝deb包 dpkg -P package-file-name
nghttp2官方文件
修改版本號
configure.ac檔案
找到進行修改即可
AC_PREREQ(2.61)
AC_INIT([nghttp2], [1.40.0-DEV], [t-tujikawa@users.sourceforge.net])
deb包下載地址
https://github.com/landv/nghttp2/releases
https://github.com/landv/nghttp2/releases/download/v1.39.11/nghttp2-tools_1.0-1_amd64.deb