如何在Windows上启用ssl编译gSoap?

时间:2013-04-11 17:45:21

标签: c++ windows mingw gsoap

我正在尝试使用ssl支持构建gSoap二进制文件。我从这个网站下载了WIN32 openssl的最新gSoap和二进制文件:http://slproweb.com/products/Win32OpenSSL.html

根据gSoap documentation,我必须使用启用了DWITH_OPENSSL选项的标准过程进行编译。我认为最自然的选择是使用minGW,但我对这个工具的经验不多。当我尝试这个时,(并且在应用this patch之后,我留下了两个缺少的库链接时间:-lssl和-lcrypto。

我想我必须在编译指令中添加一个-L选项,但我在openssl lib文件夹中看不到任何libssl或libcrypto(应该是.a还是.lib?)。我必须重新编译这些吗?还是我错过了什么?

3 个答案:

答案 0 :(得分:2)

是的,据我所知,如果您使用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 ....

答案 1 :(得分:2)

您还可以使用更多" native"方式,即。 Visual Studio C编译器。然而,这不是很直接。

首先,编译openssl(对VS 2015社区版有效,但我相信任何2015年都可以):

  • 下载openssl来源,解压缩到某个文件夹
  • 下载PERL for windows(ActivePerl或Straberry Perl - 这是免费的)并安装
  • 打开"打开Visual Studio 2015工具命令提示符"从菜单开始
  • cd to openssl uncompressed source folder

在那里运行以下命令(这个集合使用版本w / o assembbler):

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

之后,您将在c:\ some \ openssl \ dir

中安装openssl产品

接下来,要使用SSL支持编译基于gSoap的应用程序,您必须添加以下设置(所有设置均来自"项目 - >属性"在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进行编译,并像任何其他应用程序一样运行/调试。

祝你好运。

答案 2 :(得分:1)

好的我终于成功了,这是我使用的不同步骤:

  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中运行configure,添加了正确的LDFLAGS和CXXFLAGS,即:

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