手動編譯 mod_wsgi 紀錄

手動編譯 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

參考

  1. mod_wsgi Quick Installation Guide
  2. tre编译中的-shared和-fPIC
  3. relocation R_ARM_THM_MOVW_ABS_NC against `a local symbol’ can not be used when making a shared object; recompile with -fPIC (Bug #4210)
  4. how to recompile with -fPIC
This entry was posted in Linux, 程式設計. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *