gSoap 機能を使用しています。
2 つの wsdl ファイルを使用する C++ コード (ダイム アクセス用) をコンパイルしようとしています。最初は、両方の関数が 1 つの .wsdl ファイルにありました。ただし、プロセス集約型のサービスを 1 台のマシンで実行し、他の機能を古いホストで実行できるように、それらは分離されています。
1 つの .wsdl ファイルを使用する場合、すべて問題なく機能します (以下の COMPILE を参照)。コメントアウトされた部分で、すべてOKです。行を追加すると (つまり、もう 1 つの .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 ファイルを使用していません。
役立つ情報があれば大歓迎です。
ティア、ケーシー
エラー
/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)`