手動編譯 mod_wsgi 紀錄
====================================
源由:
目前手上有一個工作環境是安裝ARM Debian 7 (wesley), 而其apt-get 取得的mod_wsgi 是給python 3.2版, 而我使用的卻是自行編譯的Python 3.4.4版, 因此造成Apache 用mod_wsgi 載入我的程式是時出現一堆怪錯誤現象, 因此只好自行編譯mod_wsgi 來給Apache 使用. 注意: 這裡我使用的Python 3.4.4 在編譯時, 必須要使用shared library 的方式, 不然會造成mod_wsgi 連結失敗. 會有如下的錯誤訊息
/usr/bin/ld: /opt/py3.4/lib/libpython3.4m.a(abstract.o): relocation R_ARM_THM_MOVW_ABS_NC against `PyExc_TypeError' can not be used when making a shared object; recompile with -fPIC
/opt/py3.4/lib/libpython3.4m.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
所需套件
# apt-get install apache2 apache2-mpm-worker apache2-threaded-dev
流程
首先使用 Python virtual environment, 以確保我使用的python 是3.4.4. 參考我的前一篇文章
到這裡下載mod_wsgi source code. 我這裡使用的是4.5.2版
# mkdir -p $HOME/mod_wsgi_src
# cd $HOME/mod_wsgi_src
# wget https://github.com/GrahamDumpleton/mod_wsgi/archive/4.5.2.tar.gz
# tar -zxvf 4.5.2.tar.gz
# cd mod_wsgi-4.5.2
# ./configure
# make && make install
裝完後, 會產生 mod_wsgi.so 並且放到 /usr/lib/apache2/modules
然後修改Apache2 的設定, 來載入此module, 並且重新啟動Apache2
# echo LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so > /etc/apache2/mods-available/wsgi.load
# /etc/init.d/apache2 restart