Windows XP 32位下MinGW编译gSoap 2.8.123遇错及SSL编译需求
编译带SSL支持的gSoap 2.8.123 wsdl2h.exe(Windows XP 32位 + MinGW)
前置准备
- 确认C:\MinGW的编译工具链完整(gcc、g++、make、autoconf这些组件都得装全)
- 先在MinGW环境下编译好适配Windows XP的32位OpenSSL,假设安装路径为
C:\MinGW\openssl(需包含include和lib两个子目录)
具体编译步骤(MSYS终端内执行)
- 切换到gSoap源码根目录(注意路径转成MSYS格式,比如
C:\gsoap-2.8.123对应/c/gsoap-2.8.123):
cd /c/path/to/gsoap-2.8.123
- 清理之前的编译残留(如果之前尝试过编译操作):
make distclean
- 执行configure脚本,明确指定SSL依赖路径和XP兼容参数:
./configure \ --prefix=/mingw \ --enable-ssl \ CPPFLAGS="-I/mingw/openssl/include -D_WIN32_WINNT=0x0501" \ LDFLAGS="-L/mingw/openssl/lib -lssl -lcrypto" \ CC=gcc \ CXX=g++
- 参数说明:
--prefix=/mingw:编译产物直接安装到MinGW目录,方便后续调用--enable-ssl:核心开关,启用SSL支持以编译带SSL功能的wsdl2hCPPFLAGS:强制指定OpenSSL头文件路径,同时定义_WIN32_WINNT=0x0501适配Windows XP系统APILDFLAGS:指定OpenSSL库文件路径,链接ssl和crypto依赖库- 直接指定
CC/CXX避免环境变量冲突,确保使用MinGW的编译器
- 编译并安装:
make make install
已知问题补充解决
1. 再次出现_set_errno was not declared in this scope错误
直接修改stdsoap2.h中的soap_reset_errno宏定义:
#define soap_reset_errno() do { errno = 0; } while (0)
替换原依赖_set_errno的版本,Windows XP下的MinGW头文件未正确暴露该函数,直接重置errno即可解决。
2. sys/socket.h缺失错误
检查MinGW是否安装了mingw32-base和mingw32-gcc-g++包,这些包包含POSIX兼容头文件。若仍缺失,在CPPFLAGS中添加MinGW默认头文件目录:
CPPFLAGS="-I/mingw/include -I/mingw/openssl/include -D_WIN32_WINNT=0x0501"
3. configure的includedir参数无效问题
Windows MinGW环境下,includedir参数常被系统默认路径覆盖,直接通过CPPFLAGS指定头文件路径是更可靠的方案,这也是上述指令未依赖该参数的原因。
内容的提问来源于stack exchange,提问作者famedoro
相关产品推荐
相关产品推荐

