在SunOS5.8/solaris7上使用Xerces-C解析器
??????????????????????????????????????? 在SunOS5.8/solaris7上使用Xerces-C解析器
1、下載到二進(jìn)制版本:xerces-c2_4_0-solaris_27-cc_62.tar.gz
2、解壓至:xerces-c2_4_0-solaris_27-cc_62
目錄結(jié)構(gòu):
?xerces-c2_4_0-solaris_27-cc_62(為簡單起見,后改為xerces)
??bin??//樣例的可執(zhí)行文件(筆者為SunOS 5.8,這些文件全部沒法執(zhí)行,需要重新編譯)
??doc??//文檔
??etc??//沒理它
??include??//INCLUDE文件
??lib??//庫文件
??samples??//樣例源文析
??scripts??//沒理它
??
3、首先在lib下有以下三個文件
?libxerces-c.so??0字節(jié)(無用)
?libxerces-c.so.24?0字節(jié)(無用)
?libxerces-c.so.24.0?7M多
編譯鏈接時,庫用:libxerces-c.so.24.0,但程序運(yùn)行時找的卻是libxerces-c.so.24,但libxerces-c.so.24文件只有0字節(jié),
顯然不認(rèn),后來只好把libxerces-c.so.24.0改名為libxerces-c.so.24,示例運(yùn)行正常(我只編譯了DOMPrint)。
4、編譯過程(由于我不太懂GNU的一些工具,所以都是笨方法)
**幾個環(huán)境變量需要設(shè):XERCESCROOT=$OIEDIR/cfrtest/xml/xerces
???export XERCESCROOT
??在INCLUDE中加入/xerces/include
??在LD_LIBRARY_PATH加入/xerces/lib
**(生成MAKE文件)轉(zhuǎn)到samples目錄下,運(yùn)行runConfigure(./runConfigure -p<platform> -c<C_compiler> -x<C++_compiler>)如:. ./runConfigure -psolaris -ccc -xCC
?但是出現(xiàn)一./configure不能運(yùn)行的錯誤,后來直接手工運(yùn)行:. ./configure ,自動生成了所有make文件。
**(編譯)轉(zhuǎn)到DOMPrint目錄下:直接運(yùn)行make但不幸的時,會出現(xiàn)錯誤,后發(fā)現(xiàn)好象是機(jī)器不能運(yùn)行ifeq等之類的語句,
在自動生成的makefile中有以下兩句:
??include ${XERCESCROOT}/version.incl
??include ../Makefile.incl
這些語句在Makefile.incl中有,該文件主要為不同平臺設(shè)置不同的參數(shù)。只好用笨方法,把有關(guān)solaris平臺的所有語句拷貝到
本makefile中(語句include ${XERCESCROOT}/version.incl后)
再運(yùn)行make,發(fā)現(xiàn)生成了.o文件,但鏈接時出錯,這主要是庫文件名的設(shè)置問題。
**(鏈接)由于已有了目標(biāo)文件,這里不用MAKE文件,直接運(yùn)行CC如下:
CC? -L/usr/lib /userhome/oieapp/oiesvr/cfrtest/xml/xerces/bin/obj/DOMPrint/DOMPrint.o /userhome/oieapp/oiesvr/cfrtest/xml/xerces/bin/obj/DOMPrint/DOMTreeErrorReporter.o /userhome/oieapp/oiesvr/cfrtest/xml/xerces/bin/obj/DOMPrint/DOMPrintFilter.o /userhome/oieapp/oiesvr/cfrtest/xml/xerces/bin/obj/DOMPrint/DOMPrintErrorHandler.o -o /userhome/oieapp/oiesvr/cfrtest/xml/xerces/bin/DOMPrint /userhome/oieapp/oiesvr/cfrtest/xml/xerces/lib/libxerces-c.so.24.0 -lc -lgen
與makefile語句的不同之處在于:沒有-l參數(shù)指定庫,而直接寫上了libxerces-c.so.24.0的全路徑(如果已更名為libxerces-c.so.24,則用更名后的名字)。
一切OK!
**(運(yùn)行)如果沒對庫文件改名,也沒有刪除兩個大小為0的文件,則會出現(xiàn)libxerces-c.so.24未知類型文件的錯,改名后運(yùn)行正常(把libxerces-c.so.24.0改名為libxerces-c.so.24)。
如下:
$DOMPrint class.xml
<?xml version="1.0" encoding="UTF-8" standalone="no" ?><!DOCTYPE course [
<!ELEMENT course (Name,Dept,Instructor,Student)>
<!ELEMENT Name (#PCDATA)>
<!ELEMENT Dept (#PCDATA)>
<!ELEMENT Instructor (Name)>
<!ELEMENT Student (Name)*>
]><course>
<Name>Calculus</Name>
<Dept>Math</Dept>
<Instructor>
<Name>Jim Green</Name>
</Instructor>
<Student>
<Name>Jack</Name>
<Name>Mary</Name>
<Name>Paul</Name>
</Student>
</course>
**(其它)當(dāng)然還有一些細(xì)節(jié)問題,主要是路徑或是環(huán)境變量之類(比如,我把XERCESCOUT全改成了XERCESCROOT,這個不是必須的,如果沒改,還需設(shè)置XERCESCOUT環(huán)境變量)。
改后的makefile如下:
PLATFORM = SOLARIS
COMPILER = CC
GCC =
GXX =
CXXFLAGS = -g
CFLAGS = -g
LDFLAGS =
THREADS =
EXTRA_LIBS =
PREFIX = /usr/local
#以下三句其實(shí)是include ${XERCESCROOT}/version.incl的替代
VER=2_4_0
SO_TARGET_VERSION=24
SO_TARGET_VERSION_MAJOR=0
#BEGIN 從include ../Makefile.incl而來
INCLUDES= -I. -I${XERCESCROOT}/include
LIB_DIR=${XERCESCROOT}/lib
LIBNAME=xercesc
THISLIB=${LIB_DIR}/${LIBNAME}
LIBRARY_NAMES=-l${LIBNAME}
LIBRARY_SEARCH_PATHS=-L${LIB_DIR}
TO = o
CMP= -c ${CXXFLAGS}
CC= CC -c -D${PLATFORM} -D_REENTRANT -pic
LINK =? CC -D${PLATFORM} ${LDFLAGS}
PLATFORM_LIB_LINK_OPTIONS=-L/usr/lib
EXTRA_LINK_OPTIONS=-lc -lgen ${EXTRA_LIBS}
SHLIBSUFFIX=.so
#END 從include ../Makefile.incl而來
APP_NAME=DOMPrint
#原來XERCESCROOT是XERCESCOUT
OUTDIR= ${XERCESCROOT}/bin/obj/${APP_NAME}
EXEC=?${XERCESCROOT}/bin
OBJS=?${OUTDIR}/DOMPrint.o ${OUTDIR}/DOMTreeErrorReporter.o ${OUTDIR}/DOMPrintFilter.o ${OUTDIR}/DOMPrintErrorHandler.o
SRC=?${XERCESCROOT}/samples/${APP_NAME}
HEADER_FILES=${SRC}/DOMTreeErrorReporter.hpp ${SRC}/DOMPrintFilter.hpp ${SRC}/DOMPrintErrorHandler.hpp
#這幾句也可以不注釋
#makedir::
#?-mkdir -p $(OUTDIR)
#最終鏈接命令對下面這句做了一些改動(見上文的說明)
${EXEC}/${APP_NAME}:: ${OBJS}
?${LINK} ${PLATFORM_LIB_LINK_OPTIONS} ${OBJS} -o $@ ${LIBRARY_SEARCH_PATHS} ${LIBRARY_NAMES} ${EXTRA_LINK_OPTIONS}
${BATCH_TARGET}:: ${OBJS}
?${LINK} ${PLATFORM_LIB_LINK_OPTIONS} ${OBJS} -o $@ ${LIBRARY_SEARCH_PATHS} ${LIBRARY_NAMES} ${EXTRA_LINK_OPTIONS}
$(OUTDIR)/DOMPrint.o:: ${SRC}/DOMPrint.cpp ${HEADER_FILES}
?${CC} -I/userhome/oieapp/oiesvr/cfrtest/xml/xerces/include? ${CMP} -o $(OUTDIR)/DOMPrint.o ${SRC}/DOMPrint.cpp
$(OUTDIR)/DOMTreeErrorReporter.o:: ${SRC}/DOMTreeErrorReporter.cpp ${HEADER_FILES}
?${CC} -I/userhome/oieapp/oiesvr/cfrtest/xml/xerces/include? ${CMP} -o $(OUTDIR)/DOMTreeErrorReporter.o ${SRC}/DOMTreeErrorReporter.cpp
$(OUTDIR)/DOMPrintFilter.o:: ${SRC}/DOMPrintFilter.cpp ${HEADER_FILES}
?${CC} -I/userhome/oieapp/oiesvr/cfrtest/xml/xerces/include? ${CMP} -o $(OUTDIR)/DOMPrintFilter.o ${SRC}/DOMPrintFilter.cpp
?
$(OUTDIR)/DOMPrintErrorHandler.o:: ${SRC}/DOMPrintErrorHandler.cpp ${HEADER_FILES}
?${CC} -I/userhome/oieapp/oiesvr/cfrtest/xml/xerces/include?? ${CMP} -o $(OUTDIR)/DOMPrintErrorHandler.o ${SRC}/DOMPrintErrorHandler.cpp
#這幾句也可以不注釋
#clean::
#?rm -f ${OBJS} ${EXEC}/${APP_NAME}
#
#distclean::?clean
#?rm -f Makefile
總結(jié)
以上是生活随笔為你收集整理的在SunOS5.8/solaris7上使用Xerces-C解析器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Storing XML in Relat
- 下一篇: time操作