在Windows下編譯MySQLdb

來源:互聯網
上載者:User

心血來潮,想自己編譯一下MySQLdb。

首先是要配置一個編譯環境。我的作業系統是Windows XP SP2,Python 2.5.1。因為Python是直接從python.org下載的二進位版本,這個版本是用VC2003(VC7.1)編譯,所以相應的python extension都需要用這個版本的VC編譯(也可以用mingw,但是可能會有些問題,因為mingw使用的是msvcrt.dll,而Python 2.5用的是msvcrt71.dll,據說需要修改mingw下一個specs檔案,不是很明白)。如果你直接安裝了Visual Studio .NET 2003,那就很簡單了。但是如果你機器上裝的不是這個版本的VC,或者只裝了VC ToolKit 2003,那就需要自己做些事情了。具體可以參考我上篇文章裡收錄的兩個連結。

接下來記錄一下安裝MySQLdb的過程。先從http://sourceforge.net/projects/mysql-python下載MySQLdb的原始碼,我下載的是1.22版本的。另外,安裝的時候需要MySQL的標頭檔和庫檔案,我的機器已經安裝了5.1.22版本的MySQL。把MySQLdb的代碼解壓後,進入相應的目錄,執行python setuo.py install,然後...出錯了。看了一下錯誤資訊:WindowsError: [Error 2],這是一個Windows系統的錯誤碼,執行net helpmsg 2,查看代號2的錯誤是:系統找不到指定的檔案。在看Python的錯誤資訊,應該是在開啟註冊表的時候沒找到對應的索引值。查了一下代碼,原來在site.cfg這個設定檔裡有這樣一行:registry_key = SOFTWARE/MySQL AB/MySQL Server 5.0,改成registry_key = SOFTWARE/MySQL AB/MySQL Server 5.1,再build一次,嗯,果然往下走了。不過,接著拋出一串VC的編譯錯誤,大致是這樣的:

D:/Program Files/Microsoft Platform SDK for Windows XP SP2/Include/WinSock2.h(2178) : error C2375: 'getservbyname' : redefinition; different linkage  D:/Program Files/Microsoft Platform SDK for Windows XP SP2/Include/WinSock.h(867) : see declaration of 'getservbyname'

這個錯誤我熟悉啊,呵呵。肯定是在程式裡混合使用了winsock.h和winsock2.h。我查了一下_mysql.c,發現有這麼兩行:

#include <windows.h>
#include <config-win.h>

windows.h是Platform SDK裡的一個標頭檔,這個檔案會包含winsock.h,而config-win.h,這個檔案是MySQL的一個標頭檔,MySQL 5.1的這個檔案會包含winsock2.h(呵呵,估計5.0以前的MySQL包含的也是winsock.h,回頭我查一下),所以編譯的時候就亂套了。

接下來就簡單了,我把config-win.h的#include <winsock2.h>改成#include <winsock.h>,再編譯,就OK了!

不過我覺得改MySQL的檔案不太爽,決定還是恢複回去,把_mysql.h裡#include <windows.h>這行注釋掉,再一編譯,嗯,也OK了。這樣還是不完美的,螢幕上的資訊顯示,連結的時候用的還是winsock的庫檔案wsock32.lib。對於我這樣一個處女座的人,還是要繼續的:)

再檢查一下代碼,在setup_windows.py裡,把libraries = [ 'kernel32', 'advapi32', 'wsock32', client ]改成libraries = [ 'kernel32', 'advapi32', 'ws2_32', client ],再重新編譯一次,嗯,這下 滿意了!

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.