windows 編譯 libxml2


windows 編譯 libxml2

轉自:http://www.cnblogs.com/imlucky/archive/2012/10/29/2744992.html

文章一:Windows環境下libxml2庫的使用小結

(1)--環境的搭建,下載與安裝LIBXML2和ICONV

          Libxml2是一個C語言的XML程序庫,可以簡單方便的提供對XML文檔的各種操作,並且支持XPATH查詢,以及部分的支持XSLT轉換等功能。Libxml2的下載地址是http://xmlsoft.org/downloads.html,完全版的庫是開源的,並且帶有例子程序和說明文檔。完全版的文件名為:libxml2-2.7.8.tar.gz。

          Libxml2中默認的內碼是UTF-8,所有使用libxml2進行處理的xml文件,必須首先顯式或者默認的轉換為UTF-8編碼才能被處理。
要在xml中使用中文,就必須能夠在UTF-8和GB2312內碼(較常用的一種簡體中文編碼)之間進行轉換。Libxml2提供了默認的內碼轉換機制,並且在libxml2的Tutorial中有一個例子,事實證明這個例子並不適合用來轉換中文。所以需要我們顯式的使用ICONV來進行內碼轉換,libxml2本身也是ICONV使用進行轉換的。ICONV是一個專門用來進行編碼轉換的庫,基本上支持目前所有常用的編碼。它是glibc庫的一個部分,常常被用於UNIX系統中。當然,在windows下面使用也沒有任何問題。

其下載地址是http://gnuwin32.sourceforge.net/packages/libiconv.htm,文件名為libiconv-1.9.2-1-lib.zip。

          將libiconv-1.9.2-1-lib.zip解壓,將其中的iconv.h放入C:\opt\include目錄中,將其中的libiconv.lib放入C:\opt\lib中,並改名為iconv.lib.(沒有opt目錄就新建一個)。

          解壓libxml2-2.7.8.tar.gz文件到C盤根目錄,在c:\libxml2-2.7.8\libxml2-2.7.8\win32目錄中存放了多個Windows平台編譯器的Makefile文件,我們使用vs2008,所以待會會用Makefile.msvc文件。

1.進入Visual Studio 2008 Command Prompt;

2.cd c:\libxml2-2.7.8\libxml2-2.7.8\win32

3.輸入cscript configure.js compiler=msvc prefix=c:\opt  include=c:\opt\include lib=c:\opt\lib debug=yes,回車執行。

4.最后使用nmake命令進行編譯,輸入nmake /f Makefile.msvc並回車。

此時會出現一下錯誤提示,

Makefile.msvc(465) : fatal error U1020: end-of-file found before next directive
Stop.

網上找了下原因,原來是Makefile.msvc中存在錯誤。

+!if "$(WITH_ICU)" == "1"
+LIBS = $(LIBS) icu.lib
+!endif

將以上三行前面的+號都刪掉,重新執行nmake即可。

在當前win32目錄中生成了一個bin.msvc目錄,其中就有開發需要的libxml2.lib和libxml2.dll文件。

 

文章二:使用Visual Studio 2010本地構建libxml-python

轉自:http://blog.csdn.net/mscf/article/details/7526777

由於要使用libxml-python,官方下載的Windows二進制發布安裝包會向系統添加反安裝信息,和經典Windows應用程序混為一堂,不方便管理,因此決定自己在本地進行編譯,加之這樣可以部分避開MinGW中轉。MinGW在本機的表現實在令人蛋疼,部分應用效率之差都不敢恭維啊。在構建過程中遇到了一些問題,部分問題發現是自己再4年前的項目應用中解決過的,由於當時沒留下記錄,所有的圖破又重走一遍,實在是浪費生命,本次發誓特別地將其記錄下來。
 首先是准備工作,先下載幾個必要的源代碼包,羅列如下:
 zlib,官網http://zlib.net/是進不去了,不知道是牆了還是網站本身就不可用,反正就是用不了,還好在本地找到了自己以前下載的一個版本,在此嘮叨兩句,此等連許多優秀開源軟件的站點都被牆的政策實在是令人憤慨!
 libiconv,下載地址http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
 libxml2,ftp://xmlsoft.org/libxml2/libxml2-2.7.8.tar.gz
 libxslt,ftp://xmlsoft.org/libxml2/libxslt-1.1.26.tar.gz
 下載源碼包完畢,現在開始逐個構建。
 一、zlib構建
 1、解壓zlib源碼包至本地某目錄,如解壓到E:\Home\zlib125;
 2、打開Visual Studio 2010的命令行工具窗口,執行cd到解壓好的源代碼目錄:>cd E:\Home\zlib125;
 3、執行>nmake /f win32\Makefile.msc LOC="-DASMV -DASMINF" OBJA="inffas32.obj match686.obj";
 4、執行無錯誤后產生需要的zlib1.dll和zlib1.lib。
 二、libiconv構建
 1、解壓libiconv源碼包至本地某目錄,如加壓到E:\Home\libiconv-1.14;
 2、由於libiconv放棄支持nmake構建,此處只有借助MinGW或Cygwin;
 3、構建辦法和類Unix就沒什么分別了,只是目錄地址和Windows的磁盤盤符要注意結合起來;
 4、構建完成后生成libcionv.dll和libiconv.lib。
 三、libxml2構建
 1、將libxml2源碼包解壓至本地某目錄,如E:\Home\libxml2-2.7.8;
 2、打開Visual Studio 2010的命令行工具窗口,執行cd到解壓好的源代碼目錄:>cd E:\Home\libxml2-2.7.8;
 3、執行cd到win32子目錄,>cd win32,執行>cscript configure.js --help查看支持的編譯選項;
 4、根據需要添加和去除編譯選項,如>cscript configure.js prefix=d:\libxml2-2.7.8 include=E:\Home\libiconv-1.14\include lib=E:\Home\libiconv-1.14\lib incdir=d:\libxml2-2.7.8\include libdir=d:\libxml2-2.7.8\lib bindir=d:\libxml2-2.7.8\bin sodir=d:\libxml2-2.7.8\bin iconv=yes zlib=yes;
 5、編輯Makefile.msvc文件,查找“+”字符,刪除3處“+”號(估計是不是GNU和MS的傻瓜用戶搞惡作劇,埋下這等地雷),查找編譯選項/OPT:NOWIN98,刪除之;
 6、編輯源碼根目錄的testapi.c文件刪除第294行(此時不刪除也行,編譯報錯時將該不可見的字符常量修改為任意的字符常量,該函數主要用來測試API,對最終API的使用沒有影響);
 7、在win32目錄下執行>nmake /f Makefile.msvc,編譯無錯誤后可以執行>nmake /f Makefile.msvc install將並以結果安裝到預定義的目錄下。
 四、libxslt構建
 libxslt構建和libxml2構建大同小異,好處是基本沒有什么錯誤需要你去糾偏,做法如下:
 1、將libxslt源碼包解壓至本地某目錄,如E:\Home\libxslt-1.1.26;
 2、打開Visual Studio 2010的命令行工具窗口,執行cd到解壓好的源代碼目錄:>cd E:\Home\libxslt-1.1.26;
 3、執行cd到win32子目錄,>cd win32,執行>cscript configure.js --help查看支持的編譯選項;
 4、根據需要添加和去除編譯選項,如>cscript configure.js prefix=d:\libxslt-1.1.26 include=E:\Home\libiconv-1.14\include lib=E:\Home\libiconv-1.14\lib incdir=d:\libxslt-1.1.26\include libdir=d:\libxslt-1.1.26\lib bindir=d:\libxslt-1.1.26\bin sodir=d:\libxslt-1.1.26\bin iconv=yes zlib=yes;
 5、編輯Makefile.msvc文件,查找編譯選項/OPT:NOWIN98,刪除之; 
 6、在win32目錄下執行>nmake /f Makefile.msvc,編譯無錯誤后可以執行>nmake /f Makefile.msvc install將並以結果安裝到預定義的目錄下。
 五、libxml-python構建
 萬事具備后就要開始制作libxml-python了,首先需要在zlib和libiconv上稍作手腳。
 1、修改預先編譯的zlib動態庫的名稱,可以將zlib1.dll復制一份,然后將名稱中的“1”刪除,變成zlib.dll(該步驟可選,看個人愛好);
 2、復制先前編譯的libiconv.dll,更名為iconv.dll,使用dumpbin工具將導出函數名重定向為文本文件,>dumpbin /exports iconv.dll >iconv.def,然后修改iconv.def文件內容,內容和格式可參考MSDN對def文件的描述;
 3、執行執行>lib /def:iconv.def /machine:386 /out:iconv.lib,至此,需要的開發包都准備完畢;
 4、修改E:\Home\libxml2-2.7.8\python目錄下的setup.py,根據已准備好的路徑加入iconv的iconv_includes內容,加入libxml的xml_includes內容,修改libdirs,修改ROOT定義,修改dlls,Python代碼本身和文檔也差不多,能一眼就看出端倪,在此僅作簡述;
 5、執行python setup.py build,執行python setup.py install。

 大功告成,可以去Python下面嘗試libxml的功能了,時間太急,收太快,好在目標只是做記錄自己參考,但願今后看見能回憶出細節,省得再行彎路!

 

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

轉自:http://blog.csdn.net/yui/article/details/6110764

ibxml2是一款開源的、跨平台的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,如下圖:
 
 
 
那么就可以執行了,測試結果:

 

 

 

 

參考文章:

文章一:http://blog.csdn.net/mscf/article/details/7526777


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM