我正在尝试使用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?)。我必须重新编译这些吗?还是我错过了什么?
答案 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年都可以):
在那里运行以下命令(这个集合使用版本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中):
如果您使用wsdl2h.exe和soapcpp2.exe工具生成了类,那么您几乎已经完成了。 验证您的stdsoap2.cpp文件是否包含以下行:
#include <openssl\ssl.h>
#include <openssl\rsa.h>
如果没有,您可以在#ifdef WITH_OPENSSL
之后添加它们这完全是我的项目。我可以使用VC2015进行编译,并像任何其他应用程序一样运行/调试。
祝你好运。答案 2 :(得分:1)
好的我终于成功了,这是我使用的不同步骤:
首先,我必须使用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中运行configure,添加了正确的LDFLAGS和CXXFLAGS,即:
LDFLAGS+=" -L/c/openssl/ -L/c/MinGW/lib/" CXXFLAGS+=" -I/c/openssl/include/" ./configure