Win10 64位操作系統中編譯nginx

參考如下信息

環境準備

  • 已安裝VS2010的Win10電腦一臺
  • 安裝ActivePerl。這個是爲了編譯openssl
  • 安裝msys2

源碼下載

  • nginx源碼:nginx-8acaa1161783.tar.gz。
    1. 一定不能是在http://nginx.org/en/download.html這裏下載的源碼,否則編譯不過。需要到http://hg.nginx.org/nginx這裏去下載
  • openssl-1.0.2p.tar.gz
    1. 據說OpenSSL要使用1.0.xx版本的,1.1的版本編譯不過的。我沒有驗證過1.1版本
  • pcre-8.38.tar.gz
  • zlib-1.2.11.tar.gz

編譯環境部署

  • 打開msys2, 等msys2初始化完成後,會在msys2的統計目錄中多出來一個opt的文件夾,將下載的源碼都複製到該目錄
  • 在msys2的終端中切換路徑的/opt,就能查看到源碼
cd /opt && ls
  • 解壓縮源碼
 tar -zxvf nginx-8acaa1161783.tar.gz && tar -zxvf openssl-1.0.2p.tar.gz && tar -zxvf pcre-8.38.tar.gz && tar -zxvf zlib-1.2.11.tar.gz
  • 修改代碼結構,將依賴的源碼都移動到nginx-8acaa1161783/objs/lib目錄
cd nginx-8acaa1161783/ && mkdir -p objs/lib && mv ../openssl-1.0.2p ../pcre-8.38 ../zlib-1.2.11 ./objs/lib

開始編譯

  • 執行configure,這一步路徑是關鍵,我這裏是假設我最終會在D:\nginx下運行我的nginx程序,如果不想放在D:\nginx下,也可以根據情況去修改路徑。但一定不是/opt,/usr/local這一類的linux路徑格式
    1. 運行的時候出現了auto/cc/msvc: line 117: [: : integer expression expected的錯誤信息,看了一下auto/cc/msvc的文件,應該是版本判斷時出錯了,將如下原文修改爲,並重新執行一下configure的命令
	# 修改前
    # MSVC 2005 supports C99 variadic macros
    if [ "$ngx_msvc_ver" -ge 14 ]; then
        have=NGX_HAVE_C99_VARIADIC_MACROS . auto/have
    fi
	# 修改後
    # MSVC 2005 supports C99 variadic macros
    # if [ "$ngx_msvc_ver" -ge 14 ]; then
        have=NGX_HAVE_C99_VARIADIC_MACROS . auto/have
    # fi
auto/configure \
    --with-cc=cl \
    --with-debug \
    --prefix=D:/nginx \
    --conf-path=conf/nginx.conf \
    --pid-path=logs/nginx.pid \
    --http-log-path=logs/access.log \
    --error-log-path=logs/error.log \
    --sbin-path=nginx.exe \
    --http-client-body-temp-path=D:/nginx/temp/client_body_temp \
    --http-proxy-temp-path=D:/nginx/temp/proxy_temp \
    --http-fastcgi-temp-path=D:/nginx/temp/fastcgi_temp \
    --http-scgi-temp-path=D:/nginx/temp/scgi_temp \
    --http-uwsgi-temp-path=D:/nginx/temp/uwsgi_temp \
    --with-cc-opt=-DFD_SETSIZE=1024 \
    --with-pcre=./objs/lib/pcre-8.38 \
    --with-zlib=./objs/lib/zlib-1.2.11 \
    --with-openssl=./objs/lib/openssl-1.0.2p \
    --with-openssl-opt=no-asm \
    --with-select_module \
    --with-http_ssl_module
  • 修改openssl的編譯參數,使其支持64位編譯器
    1. 打開.\auto\lib\openssl\makefile.msvc文件
      1. 找到“VC-WIN32”替換爲“VC-WIN64A”;
      2. “if exist ms\do_ms.bat”替換爲“if exist ms\do_win64a.bat”;
      3. “ms\do_ms”替換爲“ms\do_win64a”。
  • 修改nginx-8acaa1161783/objs/Makefile中的CFLAGS字段,去掉-W4 -WX的編譯選項,添加-W3的編譯選項
  • 啓動Visual Studio x64 Win64命令提示框,將路徑切換到nginx-8acaa1161783。然後直接輸入nmake進行編譯。
    1. 編譯完成之後會有一個與sed相關的報錯,不用管他就可以了,我們已經編譯完了。

部署

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章