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 网站的入门部分复制了大部分内容。当我尝试编译时,出现以下错误:

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

I managed to solve the problem by adding the files "soapC.c" "soapClient.c" "stdsoap.c" to the project files and in the Project propertie - Include Directories adding the files generated by soapcpp2 and the gSOAP toolkit's gsoap directory

于 2012-05-26T11:17:17.577 回答
1

您将需要链接到适当的库。您将需要使用-l开关添加适当的库,并且您可以选择需要将路径传递到这些库所在的位置-L。另外,请注意,以 a 结尾的库++通常是您在使用 C++ 时应该使用的库。所以,你的命令行应该至少包括:

对于 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 回答
0

I had this problem in Debian BullsEye (11), -lgsoap++ is necessary and it was solved when I added /gsoap_library_path/libgsoap++.a to g++ compiler command line.

于 2021-09-10T11:39:54.003 回答