现在我正在编写一个程序来调用Web服务。我写了testMain.c。其他人由wsdl2h
和soapcpp2
生成。
我的编译命令是这样的:
gcc -Wall -g -c -L. soapC.c soapClient.c stdsoap2.c testMain.c
gcc -o testMain -L/usr/lib -lgsoap -lgsoapck -lgsoapssl soapC.o soapClient.o stdsoap2.o testMain.o
我得到了这些错误。请帮我。
stdsoap2.o: In function `soap_print_fault':
/test/stdsoap2.c:16279: undefined reference to `soap_check_faultsubcode'
/test/stdsoap2.c:16281: undefined reference to `soap_check_faultdetail'
stdsoap2.o: In function `soap_sprint_fault':
/test/stdsoap2.c:16341: undefined reference to `soap_check_faultdetail'
collect2: ld returned 1 exit status
答案 0 :(得分:1)
GCC / ld / GNU工具链的最新版本要求以特定顺序指定对象和库文件,以便链接器可以按照它们相互依赖的相同顺序找到符号。这意味着库应该到命令行的末尾;你的第二行(当你链接时)应该是
gcc -o testMain -L/usr/lib soapC.o soapClient.o stdsoap2.o testMain.o -lgsoap -lgsoapck -lgsoapssl
代替。
答案 1 :(得分:0)
我在网上搜索,发现了一个与我的问题非常相似的帖子。我使用这个解决方案并解决了这个问题。 http://www.mail-archive.com/gsoap@yahoogroups.com/msg01022.html
答案 2 :(得分:0)
您不需要将stdsoap2.o
链接到您的项目,因为它已经包含在libgsoap
中(通过gcc链接器选项-lgsoap)
给出。尝试从您的项目中排除stdsoap2.c
项目。来自gSOAP FAQ:
我收到gcc / g ++(GNU GCC)的链接错误。我该怎么办?对于C. apps:使用soapcpp2选项-c生成C代码,只使用 package的.c文件,链接libgsoap.a(-lgsoap)或使用 lib的 source stdsoap2.c(适用时为dom.c)。