2

我正在使用 gSoap 工具。

我正在尝试编译使用 2 个 wsdl 文件的 C++ 代码(用于一角访问)。最初,这两个函数都在一个 .wsdl 文件中。但是,它们已被分离,以便进程密集型服务可以在一台机器上运行,而其他功能可以在旧主机上运行。

使用一个 .wsdl 文件时,一切正常,一切正常(参见编译)。使用注释掉的部分,一切正常。添加行时(即添加一个额外的 .wsdl 文件),我得到错误。

在客户端中使用 2 个或更多 .wsdl 文件时,出现错误(请参阅下面的错误)。我根据导致以下错误的文档使用 -n 和 -p 选项进行编译。

如果我做:

connect_to_soap_servers/src> grep soap_default_int *.cpp
dukdimeC.cpp:SOAP_FMAC3 void SOAP_FMAC4 soap_default_int(struct soap *soap, int *a)
dukdimedcrC.cpp:SOAP_FMAC3 void SOAP_FMAC4 soap_default_int(struct soap *soap, int *a)

然后它表明(例如)soap_default_int 是为以下两者定义的:dukdimeC.cpp ~和~ dukdimeC.cpp。

这些是使用作为 gSOAP 包的一部分的 soapcpp2 命令生成的。我没有使用 wsdl 文件开始,因为已经提供了头文件。

任何可以提供帮助的信息将不胜感激。

TIA,凯西


错误

/tmp/cci3r2M7.o: In function `soap_default_byte(soap*, char*)':
/usr/include/c++/4.2.1/new:105: multiple definition of `soap_default_byte(soap*, char*)'
/tmp/cc8gONZ4.o:/S190GB/USERS/imgdev//BUSPROJ/code_development/dime/executables/test/connect_to_soap_servers/src/dukdimedcrC.cpp:617: first defined here
/tmp/cci3r2M7.o: In function `soap_default_int(soap*, int*)':
/S190GB/USERS/imgdev//BUSPROJ/code_development/dime/executables/test/connect_to_soap_servers/src/dukdimeC.cpp:1528: multiple definition of `soap_default_int(soap*, int*)'
/tmp/cc8gONZ4.o:/S190GB/USERS/imgdev//BUSPROJ/code_development/dime/executables/test/connect_to_soap_servers/src/dukdimedcrC.cpp:654: first defined here
/tmp/cci3r2M7.o: In function `soap_default_long(soap*, long*)':
/S190GB/USERS/imgdev//BUSPROJ/code_development/dime/executables/test/connect_to_soap_servers/src/dukdimeC.cpp:1592: multiple definition of `soap_default_long(soap*, long*)'

Dime_Source(顶部)

//gsoap ns service name: condime
//gsoap ns service style: document
//gsoap ns service encoding: literal
//gsoap ns service namespace: urn:dimeServer
//gsoap ns service port: http://localhost:7085
//gsoap ns schema  namespace: urn:condime

typedef char                    *xsd__string;
typedef char                    *xsd__anyURI;
typedef float                   xsd__float;
typedef long                    xsd__int;
typedef double                  xsd__double;
typedef unsigned                long long xsd__positiveInteger;

class ns__Data
{ unsigned char *__ptr; /* points to data */
  int __size;           /* size of data */
  char *id;             /* dime attachment ID (set to NULL to obtain unique cid) */
  char *type;           /* dime attachment content type */
  char *options;        /* dime attachment options (optional) */
  ns__Data();
  struct soap *soap;    /* soap context that created this instance */
};

Dime_Source_Decrumple

//gsoap ns1 service name: condimedcr
//gsoap ns1 service style: document
//gsoap ns1 service encoding: literal
//gsoap ns1 service namespace: urn:dimedcrServer
//gsoap ns1 service port: http://localhost:7086
//gsoap ns1 schema  namespace: urn:condimedcr


typedef char                    *xsd__string;
typedef char                    *xsd__anyURI;
typedef float                   xsd__float;
typedef long                    xsd__int;
typedef double                  xsd__double;
typedef unsigned                long long xsd__positiveInteger;

MAKEFILE 部分

CLNT_DECR_SRCS = dukdimedcrcondimedcrProxy.cpp dukdimedcrC.cpp dukdimedcrClient.cpp
#CLNT_DIME_SRCS = dukdimecondimeProxy.cpp dukdimeC.cpp dukdimeClient.cpp

all: client

client: Dime_Source_Decrumple DimeFunc_dll.cpp $(SOAPH) $(SOAPCPP)
        $(GSOAP) -x -n -pdukdimedcr Dime_Source_Decrumple
        $(GSOAP) -x -i -pdukdimedcr Dime_Source_Decrumple
#       $(GSOAP) -x -n -pdukdime Dime_Source
#       $(GSOAP) -x -i -pdukdime Dime_Source
        $(CPP) $(CFLAGS) $(INCLUDES) DimeFunc_dll.cpp -o $(CLNT_OUT)  $(CLNT_DECR_SRCS)       $(CLNT_DIME_SRCS) $(SOAPCPP) $(LIBS)`
4

0 回答 0