使用soapcpp2 2.8.117无法生成stdsoap2.c及版本不匹配问题求助
问题描述
我按照gSOAP官方教程构建Web服务,目标是从自动生成的calc.h构建calc.c示例,在Ubuntu中执行了以下命令:
wsdl2h -c -o calc.h http://www.genivia.com/calc.wsdl soapcpp2 -CL calc.h cc -o calc calc.c soapClient.c soapC.c stdsoap2.c
执行soapcpp2 -CL calc.h时,未生成stdsoap2.c文件,重装gSOAP包后问题依旧。从其他项目拷贝stdsoap2.c和stdsoap2.h后,又出现两个新错误:
- 编译时提示找不到
calc.c文件 - gSOAP版本不匹配错误:
cc1: fatal error: calc.c: No such file or directory compilation terminated. In file included from soapH.h:16, from soapClient.c:18: soapStub.h:20:3: error: #error "GSOAP VERSION 208117 MISMATCH IN GENERATED CODE VERSUS LIBRARY CODE: PLEASE REINSTALL PACKAGE" 20 | # error "GSOAP VERSION 208117 MISMATCH IN GENERATED CODE VERSUS LIBRARY CODE: PLEASE REINSTALL PACKAGE" | ^~~~~ In file included from soapH.h:16, from soapC.c:19: soapStub.h:20:3: error: #error "GSOAP VERSION 208117 MISMATCH IN GENERATED CODE VERSUS LIBRARY CODE: PLEASE REINSTALL PACKAGE" 20 | # error "GSOAP VERSION 208117 MISMATCH IN GENERATED CODE VERSUS LIBRARY CODE: PLEASE REINSTALL PACKAGE" | ^~~~~
正确操作步骤
1. 安装完整的gSOAP开发包
Ubuntu下需安装包含头文件和库源码的开发包,而非仅基础包:
sudo apt-get install libgsoap-dev
安装完成后,stdsoap2.c和stdsoap2.h会存放在/usr/include/gsoap/目录下,无需手动拷贝其他版本文件。
2. 修正soapcpp2命令参数
-CL参数仅生成客户端相关文件,calc.c不会由该命令生成——它是需要你自行编写的客户端逻辑代码(可参考官方教程提供的示例模板)。同时,添加-I参数指定gSOAP的import目录,避免路径问题:
soapcpp2 -CL -I/usr/include/gsoap/import calc.h
3. 编译客户端程序
- 先将官方教程中的
calc.c示例代码创建到当前工作目录; - 编译时指定gSOAP头文件路径,直接调用系统安装的
stdsoap2.c,确保版本一致:
cc -o calc calc.c soapClient.c soapC.c /usr/include/gsoap/stdsoap2.c -I/usr/include/gsoap/
4. 彻底解决版本不匹配问题
若之前手动拷贝过其他版本的stdsoap2.c和stdsoap2.h,请立即删除这些文件。如果仍存在版本问题,卸载现有gSOAP包后重新安装:
sudo apt-get purge libgsoap* sudo apt-get install libgsoap-dev
内容的提问来源于stack exchange,提问作者Lunodzo
相关产品推荐
相关产品推荐

