1. 程式人生 > >Windows + MinGW環境下使用libxml2 (1) 安裝已編譯包

Windows + MinGW環境下使用libxml2 (1) 安裝已編譯包

寫在新年鐘聲即將敲響之際,瑾以此文紀念忙碌的2010

libxml2是一款開源的、跨平臺的XML解析工具,在Windows下使用當然也不是問題,方法有兩種,一是從下載已經編譯好的二進位制包,二是下載原始碼自行編譯。我們公司在Windows下的開發環境通常是MinGW + Code::Blocks,因此本文針對的是在此前提下編譯和使用libxml2所遇到的問題。
 
已編譯包下載:http://xmlsoft.org/sources/win32/
原始碼包下載:http://xmlsoft.org/sources/
 
libxml2是依賴於libz庫和libiconv庫的,在使用之前應該先檢查一下你的MinGW是否已裝有相關的庫檔案和標頭檔案。
 
首先講一下已編譯包的使用,安裝方法很簡單,解包後,分別將bin、include、lib資料夾裡的檔案或子資料夾拷貝到MinGW的同名資料夾即可。
 
接下來可以試一下libxml2自帶的例子。在Code::Blocks中建立一個“Empty project”,工程名隨意,然後新建一個C語言程式,程式名也隨意,因為是試一下,所以Build target選上Debug即可。然後把libxml2自帶的例子example資料夾下的gjobread.c的內容複製粘帖到新建的檔案。Project build options --> Debug --> Linker settings,要加上libxml2依賴的幾個庫:libiconv.a、libwsock32.a、libxml2.lib和libz.a,如下圖:
 


 
編譯的話,可能會遇到下圖這樣的錯誤:
 
failure to convert GBK to UTF-8
 

 
這是因為我在Global compiler settings中,把預設的編譯器設定加上“-finput-charset=GBK”標誌了,解決方法有兩個,其中一個是把這個設定去掉,如果它有存在的必要,那麼可以修改標頭檔案路徑下的iconv.h,出錯的地方是註釋裡的一些特殊符號,例如下圖fromcode、tocode等地方的引號:
 

 
如果用vim開啟的話,可能是這樣的,可以比較一下它們的明顯差別:
 

 
在Code::Blocks中把這些字元替換為英文的單引號,儲存iconv.h,這個問題就解決了。
 
編譯好之後,把該程式需要讀取的gjobs.xml拷貝到Code::Blocks工程所在的路徑,並且在Project --> set program's arguments設定程式的輸入引數為gjobs.xml,如下圖:
 

 
那麼就可以執行了,測試結果: