2012-12-31 134 views
0

現在我正在編寫一個程序來調用Web服務。我寫testMain.c。其他由wsdl2hsoapcpp2生成。gsoap客戶端編譯/鏈接錯誤

我的編譯命令是這樣的:

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 

回答

1

最近GCC/LD/GNU工具鏈的版本需要該對象文件和庫文件按照一定的順序被指定,以使得碼元可以通過在它們依賴於彼此相同的順序連接體被發現。這意味着庫應該到命令行的末尾;你的第二行(當你連接時)應該是

gcc -o testMain -L/usr/lib soapC.o soapClient.o stdsoap2.o testMain.o -lgsoap -lgsoapck -lgsoapssl 

改爲。

+0

我使用你的命令,它仍然得到這些錯誤。似乎沒有文件可以提供'soap_check_fault *'函數。 –

+0

@ccsnailpp嘗試隨同對象文件的順序一起玩。 – 2012-12-31 08:24:24

+0

它仍然無法正常工作。 –

0

你不應該需要,因爲它已經包含在libgsoap(通過gcc的鏈接選項-lgsoap)給出的鏈接stdsoap2.o到您的項目嘗試從項目中排除stdsoap2.cgSOAP FAQ:。

我得到g123/g ++(GNU GCC)的鏈接錯誤我應該怎麼做?對於C 應用程序:使用soapcpp2選項-c生成C代碼,僅使用 程序包的.c文件,與libgsoap.a鏈接(-lgsoap) 或使用 lib的 源碼stdsoap2.c (和dom.c適用時)。