[size=medium][color=blue]1.PC机环境的安装[/color][/size]
下载安装包:
到官方网站下载安装包,网址:http://xmlsoft.org/downloads.html。我使用的源码包为:libxml2-2.7.8.tar.gz
PC端安装
解压:
解压后,进入目录,并对libxml2进行配置。在PC机上的配置相对比较简单,只需指定相应的安装目录就行了。
编译、安装完成后,在/usr/local/arm/libxml_pc目录下会产生四个目录,编译成功。
[size=medium][color=blue]ARM交叉编译、移植[/color][/size]
删除之前的libxml2解压后的目录,对libxml2-2.7.8.tar.gz再一次解压。并配置编译选项。
注:--without-zlib选项很重要,如果不加此选项,make的时候会提示如下错误:
注:arm-9tdmi-linux-gnu-gcc是开发板指定的交叉编译工具,如果使用arm-linux-gcc,在程序运行的时候,会有错误提示:找不到gcclib库文件。这是因为开发板上没有与arm-linux-gcc相关的gcclib库文件。
#make
#make install
安装完成后,在/usr/local/arm/libxml_arm目录下,同样会产生四个目录。然后把lib目录下的库文件拷到开发板上即可。需要拷的文件:
Libxml2.so
libxml2.so.2
libxml2.so.2.7.8
libxml2.la(这个可能不需要)
移植完成。
开发与libxml2相关的应用程序,最好在Makefile中配置两种不同的编译环境和运行环境。
上面的Makefile比较复杂,它除了编译libxml2文件外,还使用了gsoap调用webService服务。配置了PC机和ARM板上两种不同的运行环境。调试时,用PC机上的可执行环境,生成目标程序则使用arm所需的环境。
[color=blue][size=medium]gsoap生成需要的头文件[/size][/color]
下载安装包:
到官方网站下载安装包,网址:http://xmlsoft.org/downloads.html。我使用的源码包为:libxml2-2.7.8.tar.gz
PC端安装
解压:
#tar zxvf libxml2-2.7.8.tar.gz
解压后,进入目录,并对libxml2进行配置。在PC机上的配置相对比较简单,只需指定相应的安装目录就行了。
#./configure –prefix=/usr/local/arm/libxml_pc
#make
#make install
编译、安装完成后,在/usr/local/arm/libxml_pc目录下会产生四个目录,编译成功。
[size=medium][color=blue]ARM交叉编译、移植[/color][/size]
删除之前的libxml2解压后的目录,对libxml2-2.7.8.tar.gz再一次解压。并配置编译选项。
# ./configure --host=arm-linux --build=i386-linux --target=arm --prefix=/usr/local/arm/libxml_arm CC=/usr/local/arm/4.1.1/bin/arm-9tdmi-linux-gnu-gcc --without-zlib
注:--without-zlib选项很重要,如果不加此选项,make的时候会提示如下错误:
./.libs/libxml2.so: undefined reference to `gzopen'
./.libs/libxml2.so: undefined reference to `gzclose'
./.libs/libxml2.so: undefined reference to `deflate'
./.libs/libxml2.so: undefined reference to `gzrewind'
./.libs/libxml2.so: undefined reference to `gzwrite'
./.libs/libxml2.so: undefined reference to `crc32'
./.libs/libxml2.so: undefined reference to `deflateEnd'
./.libs/libxml2.so: undefined reference to `gzdopen'
./.libs/libxml2.so: undefined reference to `deflateInit2_'
./.libs/libxml2.so: undefined reference to `gzread'
collect2: ld returned 1 exit status
注:arm-9tdmi-linux-gnu-gcc是开发板指定的交叉编译工具,如果使用arm-linux-gcc,在程序运行的时候,会有错误提示:找不到gcclib库文件。这是因为开发板上没有与arm-linux-gcc相关的gcclib库文件。
#make
#make install
安装完成后,在/usr/local/arm/libxml_arm目录下,同样会产生四个目录。然后把lib目录下的库文件拷到开发板上即可。需要拷的文件:
Libxml2.so
libxml2.so.2
libxml2.so.2.7.8
libxml2.la(这个可能不需要)
移植完成。
开发与libxml2相关的应用程序,最好在Makefile中配置两种不同的编译环境和运行环境。
#INCLUDEXML = /usr/local/arm/libxml_arm2/include/libxml2
#LIBXML = /usr/local/arm/libxml/lib
#CC = gcc
INCLUDEXML = /usr/local/arm/cc/include/libxml2
LIBXML = /usr/local/arm/cc/lib
CC = /usr/local/arm/4.1.1/bin/arm-9tdmi-linux-gnu-gcc
DIR = /usr/local/arm/gsoap-linux-2.7
OBJS = main.o order.o parse.o web.o soapC.o soapClient.o stdsoap2.o
CFLAGS = -Wall -I$(DIR) -O2 -I$(INCLUDEXML) -L$(LIBXML) -lxml2
parse: $(OBJS)
$(CC) $(OBJS) $(CFLAGS) -o $@
#$(CC) $(OBJS) -o main
order.o : order.c order.h
$(CC) $(CFLAGS) -c $< -o $@
parse.o : parse.c parse.h
$(CC) $(CFLAGS) -c $< -o $@
web.o : webService/web.c webService/soapH.h webService/Service1Soap12.nsmap
$(CC) $(CFLAGS) -c $< -o $@
soapC.o:webService/soapC.c webService/soapH.h
$(CC) $(CFLAGS) -c $< -o $@
soapClient.o: webService/soapClient.c webService/soapH.h
$(CC) $(CFLAGS) -c $< -o $@
stdsoap2.o: $(DIR)/stdsoap2.c $(DIR)/stdsoap2.h
$(CC) $(CFLAGS) -c $< -o $@
define run-rm
rm -rf *.o *~ .tmp_versions
endef
.PHONY:clean
clean:
$(run-rm)
上面的Makefile比较复杂,它除了编译libxml2文件外,还使用了gsoap调用webService服务。配置了PC机和ARM板上两种不同的运行环境。调试时,用PC机上的可执行环境,生成目标程序则使用arm所需的环境。
[color=blue][size=medium]gsoap生成需要的头文件[/size][/color]
#!/bin/sh
/usr/local/arm/gsoap-linux-2.7/wsdl/wsdl2h -c -o web.h http://172.16.23.69:8089/service/Service1.asmx?wsdl
/usr/local/arm/gsoap-linux-2.7/bin/soapcpp2 -C web.h