1. 程式人生 > >Windows + MinGW環境下使用libxml2 (2) 安裝原始碼包

Windows + MinGW環境下使用libxml2 (2) 安裝原始碼包

安裝已編譯包相對簡單,安裝原始碼包則比較麻煩,編譯過程可能會因為機器的差別而遇到各種各樣的問題。不過,如果時間允許的話,編譯原始碼時遇到問題也不是壞事,可能會因此而發現專案中潛在的問題。

libxml2在MinGW下編譯需要用到msys,如果安裝MinGW時選擇預設選項,而不是全部安裝的話,需要另外裝上msys。本文編譯的libxml2版本是2.7.7

此外,如果你的zlib是當前MinGW網站下載的話,也就是版本號為1.2.3,那麼請升級到1.2.5,因為zlib-1.2.3帶有bug,導致libxml2原始碼包不能編譯通過。zlib的官方網站:
http://www.zlib.net/

為方便操作,需要修改C:/MinGW/msys/1.0/etc資料夾下的fstab,預設是隻有/mingw一個mount point的,需要加上/libxml2和/zlib,如下圖:



改好後,到上一層資料夾下雙擊msys.bat進入msys環境,這是一個模擬Linux的平臺,可以在上面執行configure、make等命令編譯Windows程式。

首先來編譯zlib-1.2.5,進入/zlib,執行:
$ make -f win32/Makefile.gcc

編譯成功後,需要拷貝需要的檔案到MinGW相應目錄:
$ cp -iv zlib1.dll /mingw/bin
$ cp -iv zconf.h zlib.h /mingw/include
$ cp -iv libz.a /mingw/lib
$ cp -iv libzdll.a /mingw/lib/libz.dll.a

然後就可以編譯libxml2了,進入/libxml2,執行:
$ ./configure

然後就是make:
$ make

如果順利的話,可以跳到本文的最後,但是通常都是不順利的,第一個可能遇到的問題是_imp__xmlFree未定義,如下圖:



這好像是一個多年未解決的bug,早在2004年就有人提出了,他的解決辦法是修改xmlexports.h,連結如下:

http://mail.gnome.org/archives/xml/2004-February/msg00007.html

修改後的xmlexports.h部分如下:



解決這個問題之後,再次執行make編譯,如果出現如下錯誤,gzdirect未定義,那就是沒有升級zlib了。



如果人品不算太差,應該就不會有其它狀況出現了。此時可以拷貝.libs/libxml2.a到MinGW的lib資料夾,拷貝include/libxml資料夾到MinGW的include資料夾,完成libxml2的原始碼安裝。

驗證就比較簡單了,可以選Code::Blocks --> Project properties --> Build targets --> Debug --> Duplicate,輸入複製的構建目標名字,比如“gcc Debug”,然後選擇OK。這樣做為了儘可能地減少重複操作。



然後選Project build options --> gcc Debug --> Linker settings,去掉預編譯庫檔案libxml2.lib,換上剛才新編譯的libxml2.a,而且,連結的順序也是很重要的,否則會出現連線錯誤。下面的是成功的連結順序:




而下面的順序是不行的:



最後,工具欄上的“Build target”選擇gcc Debug,按編譯按鈕,再執行程式,返回正常結果: