2013-04-11 64 views
1

我正在嘗試構建帶有ssl支持的gSoap二進制文件。我已經下載了最新的gSOAP的和二進制文件WIN32的OpenSSL從這個網站:http://slproweb.com/products/Win32OpenSSL.html如何在windows上啓用ssl來編譯gSoap?

按照gSoap documentation,我一直在使用啓用了DWITH_OPENSSL選項的標準程序進行編譯。我認爲最自然的選擇是使用minGW,但我對這個工具很少有經驗。當我嘗試這樣做時(並且在應用this patch後,我剩下兩個丟失的庫鏈接時間:-lssl和-lcrypto。

我想我必須向編譯指令添加-L選項,但我沒有看到任何的libssl或libcrypto(它應該是某或.LIB?)在OpenSSL lib文件夾。我必須得重新編譯這些還是我失去了一些東西?

回答

1

好吧,我終於成功了,這裏是我所使用的不同步驟:

  1. 首先,我不得不重建的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. 我跑了,交叉了我的手指!
+0

+1對於回答私人問題的+1。無論如何,有時我使用MAC來編譯一些東西,並在複製回Windows之後。 'minGW'有很多問題,但其中大多數都有解決方法 – 2013-04-12 11:59:51

2

是的,因爲我知道,如果你使用minGW 1日關閉安裝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 .... 
2

你也可以使用更多的「本地」方式,即。 Visual Studio C編譯器。然而,這並不是很直接。

首先,編譯OpenSSL的(適用於VS 2015年社區版,但我相信任何2015年會做):

  • 下載OpenSSL的來源,解壓到某個文件夾
  • 下載PERL的Windows(無論是ActivePerl或Straberry Perl的 - 這一個是免費的),並安裝
  • 打開 「打開Visual Studio 2015年工具命令提示符」 從菜單啓動
  • CD OpenSSL的未壓縮的源文件夾

運行下面的命令有(本組使用的版本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您的OpenSSL的產品:\一些\ OpenSSL的\目錄

接下來,編譯基於gSOAP的應用程序支持SSL,你必須添加以下設置(所有設置都是在Visual Studio「項目 - >屬性」一起做):

  • C/C++ - >常規,在附加包含目錄,添加「c:\ some \ openssl \ dir \ includ e「文件夾
  • C/C++ - >命令行,在」附加選項「框中,鍵入:/ DWITH_OPENSSL
  • 鏈接器 - >輸入,附加依賴項:添加」c:\ some \ openssl \目錄\ LIB \ libeay32.lib」和 「C:\一些\ OpenSSL的\目錄\ LIB \ sskeay32.lib」 到列表

如果生成使用wsdl2h.exe和soapcpp2.exe工具的類,你差不多完成了。 驗證,您stdsoap2.cpp文件有那些行:

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

如果沒有,你可以先的#ifdef WITH_OPENSSL

這一切都是爲了我的項目後添加。我可以使用VC2015編譯並像其他應用程序一樣運行/調試。

祝你好運。

+0

我不認爲這回答了他的問題。他的第一句話是「我正在嘗試構建帶有SSL支持的gSoap二進制文件」,但是您的答案涉及如何使用gSoap和SSL編譯應用程序。他需要構建gsoap二進制文件(即:soapcpp2.exe和wsdl2h.exe),因爲使用gsoap分發的二進制文件不支持Windows的SSL(不幸)。例如,http://www.onvif.org/onvif/ver10/wsdl/devicemgmt.wsdl位於SSL服務器上,因此如果您使用該服務器調用wsdl2h.exe,它將會失敗,說不支持SSL/TLS。 – Ph0t0n 2017-02-20 02:22:37