1

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

根据gSoap 文档,我必须使用启用 DWITH_OPENSSL 选项的标准过程进行编译。我认为最自然的选择是你使用 minGW,但我对这个工具没有什么经验。当我尝试这个时,(在应用这个补丁之后,我留下了两个缺少的库一个链接时间:-lssl 和 -lcrypto。

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

4

3 回答 3

2

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

  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. 我跑了make并交叉手指!
于 2013-04-12T07:53:54.603 回答
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 ....
于 2013-04-11T17:49:08.380 回答
2

您还可以使用更“原生”的方式,即。Visual Studio C 编译器。然而,这不是很简单。

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

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

在那里运行以下命令(这组使用不带汇编程序的版本):

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

接下来,要编译支持 SSL 的基于 gSoap 的应用程序,您必须添加以下设置(所有设置都在 Visual Studio 中的“项目->属性”中完成):

  • C/C++ --> General,在 Additional Include Directories 中,将“c:\some\openssl\dir\include”文件夹添加到列表中
  • C/C++ --> 命令行,在“附加选项”框中,输入:/DWITH_OPENSSL
  • Linker --> Input, Additional Dependencies:将“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 编译并像任何其他应用程序一样运行/调试。

祝你好运。

于 2016-01-08T14:06:03.223 回答