=3.7會(huì)導(dǎo)致編譯失敗編譯方法摘要本文記述如何在windows10上編譯mod_wsgi(Python3.5+Apache-2.4.39)環(huán)境win10Apache-2.4.39-https://www.apachelounge.com/download/Python-3.5VisualStudio2019(含c++開(kāi)發(fā)組件)mod_wsgi-https://github.com/GrahamDumpleton/mod_" />

日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

win10編譯mod_wsgi,基于Python3.5和

系統(tǒng) 1801 0

文章目錄

    • 摘要
    • 環(huán)境
    • 注意 - Python >= 3.7會(huì)導(dǎo)致編譯失敗
    • 編譯方法


摘要

本文記述如何在windows 10上編譯mod_wsgi ( Python3.5 + Apache-2.4.39 )


環(huán)境

  • win 10
  • Apache-2.4.39 - https://www.apachelounge.com/download/
  • Python-3.5
  • Visual Studio 2019 (含c++開(kāi)發(fā)組件)
  • mod_wsgi - https://github.com/GrahamDumpleton/mod_wsgi [ 時(shí)效性: 本文用到的源碼下載于 2019-06-15 ]

注意 - Python >= 3.7會(huì)導(dǎo)致編譯失敗

mod_wsgi的源碼中存在如下內(nèi)容, 而python37.lib文件中不存在函數(shù)PyOS_AfterFork_Child(),這就會(huì)導(dǎo)致使用的Python版本大于等于3.7都會(huì)導(dǎo)致編譯失敗,并在鏈接時(shí)提示錯(cuò)誤 :無(wú)法解析的外部符號(hào)。
因此,本文使用Python 3.5 進(jìn)行mod_wsgi的編譯

            
              
                if
              
              
                (
              
              wsgi_python_initialized 
              
                &&
              
              
                !
              
              wsgi_python_after_fork
              
                )
              
              
                {
              
              
                #
                
                  if
                
                 PY_MAJOR_VERSION > 3 || (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 7)
              
              
                PyOS_AfterFork_Child
              
              
                (
              
              
                )
              
              
                ;
              
              
                #
                
                  else
                
              
              
                PyOS_AfterFork
              
              
                (
              
              
                )
              
              
                ;
              
              
                #
                
                  endif
                
              
              
                }
              
            
          

編譯方法

  1. 找到編譯器 cl.exe, 將其位置寫入用戶環(huán)境變量PATH中。注意,請(qǐng)保證所有組件的位數(shù)一致,如均為64位,或均為32位。例如,在64位機(jī)器上編譯64位程序,需要使用 …MSVC編譯器目錄\bin\Hostx64\x64\cl.exe

  2. 在 https://github.com/GrahamDumpleton/mod_wsgi 下載mod_wsgi源碼,解壓到當(dāng)前文件夾

  3. 進(jìn)入目錄mod_wsgi/win32/,此目錄存放編譯mod_wsgi需要的Makefile文件,但到2019/06/15為止,里面沒(méi)有使用VS 2019和Python 3.5的Makefile,因此,接下來(lái)需要做三件事

    • 復(fù)制"ap24py34-win64-VC10.mk",重命名為"ap24py35-win64-VC16.mk"
    • 復(fù)制"common-VC10.mk",重命名為"common-VC16.mk"
    • 復(fù)制"build-win64-VC10.bat",重命名為"build-win64-VC16.bat"
  4. 修改ap24py35-win64-VC16.mk為如下內(nèi)容

                    
                      APACHE_ROOTDIR = Apache2.4的文件夾路徑
    
    PYTHON_ROOTDIR = Python3.5的文件夾路徑
    PYTHON_VERSION = 35
    
    MSVC_INCLUDE = MSVC編譯器的頭文件路徑
    MSVC_LIB = MSVC編譯器的庫(kù)文件路徑
    
    WINSDK_INCLUDE_UM = windows sdk的um頭文件路徑
    WINSDK_INCLUDE_UCRT = windows sdk的ucrt頭文件路徑
    WINSDK_INCLUDE_SHARE = windows sdk的shared頭文件路徑
    
    WINSDK_LIB_UCRT = windows sdk的ucrt庫(kù)文件路徑
    WINSDK_LIB_UM = windows sdk的um庫(kù)文件路徑
    
    include common-VC16.mk
    
    
                    
                  

    示例:

                    
                      APACHE_ROOTDIR = D:\App-Server\Apache24.39-Win64-VS16\Apache24
    
    PYTHON_ROOTDIR = D:\Dev\Python\Python35
    PYTHON_VERSION = 35
    
    MSVC_INCLUDE = C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.20.27508\include
    MSVC_LIB = C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.20.27508\lib\x64
    
    WINSDK_INCLUDE_UM = C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um
    WINSDK_INCLUDE_UCRT = C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt
    WINSDK_INCLUDE_SHARE = C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\shared
    
    WINSDK_LIB_UCRT = C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17763.0\ucrt\x64
    WINSDK_LIB_UM = C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17763.0\um\x64
    
    include common-VC16.mk
    
    
                    
                  
  5. 修改 common-VC16.mk為如下內(nèi)容

                    
                      CPPFLAGS = \
    /DWIN32 \
    /DNDEBUG \
    /I"$(MSVC_INCLUDE)" \
    /I"$(WINSDK_INCLUDE_UM)" \
    /I"$(WINSDK_INCLUDE_UCRT)" \
    /I"$(WINSDK_INCLUDE_SHARE)" \
    /I"$(PYTHON_ROOTDIR)\include" \
    /I"$(APACHE_ROOTDIR)\include"
    
    CFLAGS = \
    /MD \
    /GF \
    /Gy \
    /O2 \
    /Wall \
    /Zc:wchar_t \
    /Zc:forScope
    
    LDFLAGS = \
    /link \
    /LIBPATH:"$(APACHE_ROOTDIR)\lib" \
    /LIBPATH:"$(PYTHON_ROOTDIR)\libs" \
    /LIBPATH:"$(MSVC_LIB)" \
    /LIBPATH:"$(WINSDK_LIB_UM)" \
    /LIBPATH:"$(WINSDK_LIB_UCRT)" \
    /OPT:REF \
    /OPT:ICF=2 \
    /RELEASE \
    /SUBSYSTEM:WINDOWS
    
    LDLIBS = \
    python$(PYTHON_VERSION).lib \
    libhttpd.lib \
    libapr-1.lib \
    libaprutil-1.lib
    
    SRCFILES = ..\src\server\*.c
    
    mod_wsgi.so : $(SRCFILES)
        cl $(CPPFLAGS) $(CFLAGS) $(SRCFILES) /LD $(LDFLAGS) $(LDLIBS) /OUT:$@
    
    VARIANT = py$(PYTHON_VERSION)-VC16
    
    install : mod_wsgi.so
        copy $? $(APACHE_ROOTDIR)\modules\mod_wsgi-$(VARIANT).so
        :
        :
        :
        :
        : You now need to edit $(APACHE_ROOTDIR)\conf\httpd.conf and add:
        :
        :   LoadModule wsgi_module modules/mod_wsgi-$(VARIANT).so
        :
        :
        :
        :
    
    clean :
        del *.obj *.so *.so.manifest *.lib *.exp
    
    
                    
                  
  6. 修改build-win64-VC16.bat為如下內(nèi)容

                    
                      nmake -f common-VC16.mk clean
    nmake -f ap24py35-win64-VC16.mk install
    nmake -f common-VC16.mk clean
    
                    
                  
  7. 最后,在命令行中執(zhí)行此文件build-win64-VC16.bat,即可編譯成功, 編譯成功后會(huì)自動(dòng)將mod_wsgi-py??-VC??.so (本文為mod_wsgi-py35-VC16.so)復(fù)制到Apache安裝目錄的modules文件夾內(nèi)。加載此模塊仍需要自行修改Apache的配置文件。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 浙江省| 柳河县| 云安县| 灵宝市| 宁河县| 库尔勒市| 成武县| 赣州市| 晋州市| 桑日县| 连州市| 东海县| 盐亭县| 盱眙县| 丰顺县| 义马市| 华阴市| 扎赉特旗| 天等县| 瑞丽市| 舒兰市| 资源县| 新竹县| 香港 | 建昌县| 张家港市| 化州市| 凤山市| 娄烦县| 安阳县| 泉州市| 鹤山市| 建湖县| 津南区| 石林| 三原县| 浦北县| 衡东县| 临海市| 静乐县| 安顺市|