如何在windows上启用ssl来编译gSoap?

我正在尝试构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年都可以):

  • 下载openssl源文件,解压到某个文件夹
  • 为Windows下载PERL(ActivePerl或Straberry Perl – 这是免费的)并安装
  • 从菜单开始打开“打开Visual Studio 2015工具命令提示符”
  • cd到openssl未压缩的源文件夹

在那里运行下面的命令(这个集合使用版本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中的“项目 – >属性”完成的):

  • C / C ++ – >常规,在其他包含目录中,将“c:\ some \ openssl \ dir \ include”文件夹添加到列表中
  • C / C ++ – >命令行,在“其他选项”框中键入:/ DWITH_OPENSSL
  • 链接器 – >输入,附加依赖项:将“c:\ some \ openssl \ dir \ lib \ libeay32.lib”和“c:\ some \ openssl \ dir \ lib \ sskeay32.lib”添加到列表

如果你已经使用wsdl2h.exe和soapcpp2.exe工具生成了你的类,那么你几乎已经完成了。 验证您的stdsoap2.cpp文件是否包含以下行:

 #include <openssl\ssl.h> #include <openssl\rsa.h> 

如果没有,你可以在第一个#ifdef WITH_OPENSSL之后添加它们

那全是为了我的项目。 我可以使用VC2015进行编译,并像其他应用程序一样运行/调试。

祝你好运。

好吧,我终于做到了,这里是我使用的不同步骤:

  1. 首先,我不得不使用mingw重新编译openssl,因为静态库不会附带Shining Light Production发行的二进制文件。 我把openssl文件夹放在c:/ openssl /

  2. 然后,在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 
  3. 在配置文件中:

    • 我删除了所有的-DWITH_GZIP和-lz。
    • 我添加了-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" 
  4. 我在mingw中运行配置,添加适当的LDFLAGS和CXXFLAGS,即:

     LDFLAGS+=" -L/c/openssl/ -L/c/MinGW/lib/" CXXFLAGS+=" -I/c/openssl/include/" ./configure 
  5. 我跑了,交叉了我的手指!