同じアプリケーションで 2 つの個別の wsdl ファイルを使用して、Linux で gSOAP を使用して C++ Web サービス クライアントを作成しています。私は 1 つの wsdl ファイルだけで動作するように管理し、ドキュメントを読んだ後、両方のファイルで wsdl2h を使用するプロセスを実行しました。
wsdl2h -o header.h wsdlfile1.wsdl wsdlfile2.wsdl
これはうまくいったので、私はそうしました
soapcpp2 -i -I/usr/share/gsoap/import/ header.h
次に、指示に従って、typemap.dat で通常の名前空間の変更をすべて行いました。これで、タイプが soapService1Proxy.cpp/h および soapService2Proxy.cpp/h の 2 つの .cpp および .h ファイルがあることがわかりました。これは私が期待したものとはまったく異なりますが、メイン関数に両方のヘッダーを含め、各 Proxy クラスのインスタンスを作成し、1 つの wsdl ファイルで行ったのとまったく同じ方法で使用しました。次に、コンパイルします
g++ -DWITH_OPENSSL main.cpp soapC.cpp soapService1Proxy.cpp soapService2Proxy.cpp -lgsoapssl++ -lssl
エラーを返す
/tmp/ccHNDAM4.o:(.data+0x0): multiple definition of `namespaces'
/tmp/ccLJIHwV.o:(.data+0x0): first defined here
collect2: ld returned 1 exit status
「namepaces」が .nsmap ファイルの配列を参照していることはわかっています (この場合、各 wsdl で同一です)。両方を含めると、コンパイラが複数の定義を訴えるので、これらのうちの 1 つだけを含めました。ガイドラインと gSOAP のドキュメントにできる限り忠実に従おうとしましたが、この問題を解決することはできません。