3

C で Web サービスのクライアントを作成しようとしています。wsdl2h と soapcpp2 を使用して C ファイルを生成しました。netbeans では、生成されたファイルと gSOAP インクルード ディレクトリをプロジェクトのインクルード ディレクトリに追加しました。私のメインファイルは次のようになります。

#include <stdio.h> 
#include <stdlib.h>
#include <soapH.h>
#include <webserviceSoap12.nsmap>

int main(int argc, char** argv) {

    struct soap *soap1 = soap_new();
    struct _ns1__getAllCustomer *quote;
    struct _ns1__getAllCustomerResponse *quote2;
    if (soap_call___ns2__getAllCustomer(soap1, NULL, NULL, quote, quote2) == SOAP_OK)
        printf("asd\n");
    else // an error occurred  
        soap_print_fault(soap1, stderr); // display the SOAP fault on the stderr stream
    return (EXIT_SUCCESS);
}

このほとんどは、gSOAP Web サイトの入門セクションからコピーしました。コンパイルしようとすると、次のエラーが発生します。

build/Debug/MinGW-Windows/main.o: In function `main':
\NetBeansProjects\WebServiceClient/main.c:19: undefined reference to `soap_new_LIBRARY_VERSION_REQUIRED_20808'
\NetBeansProjects\WebServiceClient/main.c:22: undefined reference to `soap_call___ns2__getAllCustomer'
\NetBeansProjects\WebServiceClient/main.c:25: undefined reference to `soap_print_fault'

「soapC.c」「soapClient.c」「soapClientLib.c」ファイルをプロジェクトに追加すると、未定義の参照がさらに多くなります。私は何を間違っていますか?Win7でMinGWコンパイラでNetbeans ideを使用しています。他に必要なライブラリや含めるべきファイルは?

4

3 に答える 3

2

ファイル「soapC.c」「soapClient.c」「stdsoap.c」をプロジェクトファイルとプロジェクトプロパティに追加することで問題を解決できました-soapcpp2によって生成されたファイルとgSOAPツールキットのgsoapディレクトリを追加するディレクトリを含めます

于 2012-05-26T11:17:17.577 に答える
1

適切なライブラリにリンクする必要があります。スイッチを使用して適切なライブラリを追加する必要があり、-lオプションで、を介してこれらのライブラリが存在する場所へのパスを渡す必要があります-L++また、 C ++を使用している場合は、通常、aで終わるライブラリを使用する必要があることに注意してください。したがって、コマンドラインには少なくとも次のものを含める必要があります。

Cの場合:

gcc ... -lgsoap -L/path/to/gsoap/binaries 

C ++の場合:

g++ ... -lgsoap++ -L/path/to/gsoap/binaries 

また、SSL、Cookieなどの追加機能を使用しているかどうかに応じて、これらのライブラリもリンクする必要があります。

g++ ... -lgsoap++ -lgsoapssl++ -L/path/...

別のツールチェーンを使用している場合は、ドキュメントで正確なスイッチを検索してください。

于 2012-05-26T10:40:42.620 に答える