如何在Windows XP 32位下用MinGW编译带SSL支持的gSoap wsdl2h.exe
问题分析与解决步骤
错误根源
emulate_pthread_mutex_lock未定义引用的问题,本质是wsdl2h编译时未正确链接pthreads线程库,且gSoap的线程模拟代码未被纳入编译流程。你的操作存在以下问题:
- 手动复制库文件的方式不规范,易导致MinGW链接器无法识别库的依赖关系
configure阶段未明确启用pthreads支持,编译wsdl2h时未包含线程相关代码- 环境变量设置未覆盖链接阶段的参数
修正后的编译步骤
1. 清理编译残留
回到gSoap源码根目录,执行:
make clean make distclean
2. 重新配置环境变量与configure参数
打开MSYS终端,设置完整的编译、链接参数:
export CPPFLAGS="-DWITH_NO_C_LOCALE -DWITH_OPENSSL -DWITH_PTHREAD" export CXXFLAGS="-DWITH_NO_C_LOCALE -DWITH_OPENSSL -DWITH_PTHREAD" export LDFLAGS="-lssl -lcrypto -lpthread"
执行configure命令,明确指定依赖与安装路径:
./configure --prefix=C:/MinGW --enable-openssl --enable-pthreads
注:
--prefix指定安装到你的MinGW目录,--enable-openssl和--enable-pthreads会让configure自动检测并链接对应库,无需手动复制文件
3. 重新编译安装
执行编译与安装命令:
make make install
此时wsdl2h会正确链接pthreads相关代码,解决未定义引用错误。
验证编译结果
编译完成后,C:\MinGW\bin目录下会生成wsdl2h.exe和soapcpp2.exe,执行以下命令验证SSL支持:
wsdl2h -v
输出中显示OpenSSL support enabled即为成功。
额外注意事项
- Windows XP下需确保MinGW 6.3.0搭配的pthreads库是适配32位XP的版本,若MSYS下载的库存在兼容性问题,可直接下载预编译的
mingw32-pthreads-w32包覆盖MinGW的lib和include目录 - 避免手动复制库文件,尽量通过configure参数自动检测依赖,减少路径配置错误
内容的提问来源于stack exchange,提问作者famedoro
相关产品推荐
相关产品推荐

