編譯環境: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