我正在尝试构build带有ssl支持的gSoap二进制文件。 我已经从这个网站下载了WIN32 openssl的最新gSoap和二进制文件: http ://slproweb.com/products/Win32OpenSSL.html
根据gSoap文档 ,我必须使用启用了DWITH_OPENSSL选项的标准过程进行编译。 我认为最自然的select将使用minGW,但我对这个工具没有经验。 当我尝试这个,(和应用这个补丁后,我剩下两个缺less的链接时间库:-lssl和-lcrypto。
我想我必须添加-L选项编译指令,但我没有看到任何libssl或libcrypto(应该是.a或.lib?)在openssl lib文件夹中。 我必须重新编译这些还是我错过了什么?
是的,因为我知道如果你使用minGW
安装openssl
,之后添加路径+标志,如下所示:
gcc -I/include/ -I/local/include -L/local/lib -o download_file download_file.c -llibcurl -lcurl
这里我编译基本的C
文件。
或者如果你运行./configure
像这样添加标志:
LDFLAGS+="-L/local/lib -lcurl" LIBS+=-I/local/include ....
你也可以使用更多的“本地”方式,即。 Visual Studio C编译器。 然而这并不是很直接。
首先,编译openssl(对于VS 2015社区版有效,但我相信任何2015年都可以):
在那里运行下面的命令(这个集合使用版本w / o组装):
perl Configure VC-WIN32 no-asm --prefix=c:\some\openssl\dir ms\do_ms nmake -f ms\ntdll.mak nmake -f ms\ntdll.mak test - optional step nmake -f ms\ntdll.mak install
之后,将openssl产品安装在c:\ some \ openssl \ dir中
接下来,要编译基于gSoap的应用程序和SSL支持,您必须添加以下设置(所有设置都是从Visual Studio中的“项目 – >属性”完成的):
如果你已经使用wsdl2h.exe和soapcpp2.exe工具生成了你的类,那么你几乎已经完成了。 验证您的stdsoap2.cpp文件是否包含以下行:
#include <openssl\ssl.h> #include <openssl\rsa.h>
如果没有,你可以在第一个#ifdef WITH_OPENSSL之后添加它们
那全是为了我的项目。 我可以使用VC2015进行编译,并像其他应用程序一样运行/调试。
祝你好运。
好吧,我终于做到了,这里是我使用的不同步骤:
首先,我不得不使用mingw重新编译openssl,因为静态库不会附带Shining Light Production发行的二进制文件。 我把openssl文件夹放在c:/ openssl /
然后,在stdsoap2.h中,我将第2247行更改为:
#if defined(WIN32) && !defined(__MINGW32__) #define soap_strtoll _strtoi64 #else # define soap_strtoll strtoll #endif #if defined(WIN32) && !defined(__MINGW32__) # define soap_strtoull _strtoui64 #else # define soap_strtoull strtoull #endif
在配置文件中:
我添加了-lws2_32链接器选项(我认为对winsocket的支持)配置文件中的这些更改在第7338-7347行:
WSDL2H_EXTRA_FLAGS="-DWITH_GNUTLS" WSDL2H_EXTRA_LIBS="-lgnutls -lgcrypt -lgpg-error" SAMPLE_SSL_LIBS="-lgnutls -lgcrypt -lgpg-error" WSDL2H_SOAP_CPP_LIB="libgsoapssl++.a" else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } WSDL2H_EXTRA_FLAGS="-DWITH_OPENSSL" WSDL2H_EXTRA_LIBS="-lssl -lcrypto -lws2_32" SAMPLE_SSL_LIBS="-lssl -lcrypto -lws2_32"
我在mingw中运行配置,添加适当的LDFLAGS和CXXFLAGS,即:
LDFLAGS+=" -L/c/openssl/ -L/c/MinGW/lib/" CXXFLAGS+=" -I/c/openssl/include/" ./configure