http://blog.youkuaiyun.com/ghostyu/article/details/8162280这个是我在网上找到的,这个应该是原文出处吧!在这里再次感谢作者!
1,设置环境变量,这里我写了一个脚本,直接执行脚本就能直接配置环境变量:
root@microcreat:/workdir/private/onvif/workdir/demo# cat ../../setenv
#!/bin/sbin/
echo "set the environment for gsoap.....!"
GSOAP_PATH=$PWD/gsoap_install/bin/
export PATH=$GSOAP_PATH:$PATH
设置好后,直接执行
root@microcreat:/workdir/private/onvif# . setenv
set the environment for gsoap.....!
这样就设置好环境变量了。
2,根据头文件生成c代码:
int ns2__add( int num1, int num2, int* sum );
root@microcreat:/workdir/private/onvif/workdir/demo# pwd
/workdir/private/onvif/workdir/demo
root@microcreat:/workdir/private/onvif/workdir/demo# ls
add.h
root@microcreat:/workdir/private/onvif/workdir/demo# soapcpp2 -c add.h
**
**
**
**
**
Saving soapStub.h annotated copy of the input declarations
Using ns2 service name: Service
Using ns2 service style: document
Using ns2 service encoding: literal
Using ns2 service location: http://localhost:80
Using ns2 schema namespace: http://tempuri.org/ns2.xsd
Saving ns2.wsdl Web Service description
Saving ns2.add.req.xml sample SOAP/XML request
Saving ns2.add.res.xml sample SOAP/XML response
Saving ns2.xsd XML schema
Saving ns2.nsmap namespace mapping table
Saving soapClient.c client calling stubs
Saving soapClientLib.c client stubs with serializers (use only for libs)
Saving soapServer.c server request dispatcher
Saving soapServerLib.c server request dispatcher with serializers (use only for libs)
Saving soapH.h interface declarations
Saving soapC.c XML serializers
Compilation successful
root@microcreat:/workdir/private/onvif/workdir/demo# ls
add.h
ns2.add.req.xml
3,下面我们来完成DEMO代码:
root@microcreat:/workdir/private/onvif/workdir/demo# cat addserver.c
#include "soapH.h"
#include "add.nsmap"
int main(int argc, char **argv)
{
}
#if 1
int ns2__add(struct soap *add_soap, int num1, int num2, int *sum)
{
}
#endif
root@microcreat:/workdir/private/onvif/workdir/demo# cat addclient.c
#include "soapStub.h"
#include "add.nsmap"
int add(const char *server, int num1, int num2, int *sum)
{
}
root@microcreat:/workdir/private/onvif/workdir/demo# cat addtest.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int add(const char *server, int num1, int num2, int *sum);
int main(int argc, char **argv)
{
}
root@microcreat:/workdir/private/onvif/workdir/demo# cat Makefile
GSOAP_ROOT = /workdir/private/onvif/gsoap-2.8/gsoap
CC = gcc -g -DWITH_NONAMESPACES
INCLUDE = -I$(GSOAP_ROOT)
SERVER_OBJS = soapC.o stdsoap2.o soapServer.o addserver.o
CLIENT_OBJS = soapC.o stdsoap2.o soapClient.o addclient.o addtest.o
all: server
server: $(SERVER_OBJS)
client: $(CLIENT_OBJS)
clean:
4,完成后开始编译
root@microcreat:/workdir/private/onvif/workdir/demo# make server
gcc -g -DWITH_NONAMESPACES
In file included from soapH.h:13:0,
soapStub.h:13:22: fatal error: stdsoap2.h: No such file or directory
compilation terminated.
make: *** [soapC.o] Error 1
编译的时候出现上面的错误!
解决办法:将缺少文件复制到工作路径来:
root@microcreat:/workdir/private/onvif/workdir/demo# pwd
/workdir/private/onvif/workdir/demo
root@microcreat:/workdir/private/onvif/workdir/demo# cp -af /workdir/private/onvif/gsoap_install/include/stdsoap2.h .
root@microcreat:/workdir/private/onvif/workdir/demo# cp -af /workdir/private/onvif/gsoap-2.8/gsoap/stdsoap2.c .
root@microcreat:/workdir/private/onvif/workdir/demo# make server
gcc -g -DWITH_NONAMESPACES
gcc -g -DWITH_NONAMESPACES
gcc -g -DWITH_NONAMESPACES
addserver.c:2:24: fatal error: add.nsmap: No such file or directory
compilation terminated.
make: *** [addserver.o] Error 1
解决办法:
最后编译:
root@microcreat:/workdir/private/onvif/workdir/demo# make server
gcc -g -DWITH_NONAMESPACES
gcc -g -DWITH_NONAMESPACES
gcc -g -DWITH_NONAMESPACES
gcc -g -DWITH_NONAMESPACES
gcc -g -DWITH_NONAMESPACES
root@microcreat:/workdir/private/onvif/workdir/demo# make client
gcc -g -DWITH_NONAMESPACES
gcc -g -DWITH_NONAMESPACES
gcc -g -DWITH_NONAMESPACES
gcc -g -DWITH_NONAMESPACES
root@microcreat:/workdir/private/onvif/workdir/demo# ls
addclient.c
addclient.o
add.h
这样就编译成功:
下面是测试截图: