Cygwin下编译gsoap 2.8.46

引:

现用的gsoap版本是2.7版本,gsoap代码在sourceforge上维护,版本维护工具是SVN。gsoap 2.7有多个小版本,最新的是2.7.17。这个2.7.17版本sf页面,显示的最后修改时间是2016-09-22,点进去后,看到的gsoap_2.7.17.zip的最后修改时间是1010-05-09,这个可能是版本文件夹创建于2016-09-22。OK,扯远了,现在要说的是。综合各种现象判断gsoap2.7是基于openssl 1.0以前的版本,依赖于BIO结构。而openssl自1.0及以后的版本,不在公开BIO的结构,将该结构隐藏起来。凡是外部引用BIO结构的APP或者库,就会报告这个BIO类型的变量size不确定,原因就是openssl 1.0以后BIO结构的声明不再存在于openssl公开的头文件里了。这个东西只是在openssl的changes(相当于release notes)文件里说明了下,官方的文档并没有指出来。而后来爆出来的openssl 0.98及以前的版本存在严重漏洞,会使攻击者获得ssl加密的明文,所以如果要使用ssl加密业务交互重的数据,就要升级到openssl 0.98以上,在openssl官方公布的版本里,0.98以上就是1.0及以上。

综合以上问题,gsoap的2.7版本基本上要被弃用了,要转入到gsoap 2.8版本。今天要做的事情,就是建立gsoap 2.8 + openssl 1.1.0e的体系支持。openssl 1.1.0e的编译前文章已经有叙述解决,本文就gsoap 2.8的编译就以说明。

1.准备
  gsoap2.8.46的版本功能增强,依赖的包也相对较多。采用cygwin 32来编译gsoap至少需要以下工具及库:
1)flex develop
2)yacc develop
3)openssl 1.1.0e

2.编译配置
  本次的目标是生成cygwin 32里可运行的gsoap工具,如下:
  soapcpp2.exe wsdl2h.exe
  所以配置就在cygwin里默认。
  #./configure --prefix=/usr/local/gsoap-utils
  然后就是需要修改gsoap-2.8/config.h的文件,gsoap的配置工具在检测strtod_l/strtof_l等函数的可用性,和make会有不一致的问题。配置工具检测使用gcc去检测,检测到strtod_l/strtof_l函数,只会报告warning,说此函数是隐式声明。而在编译时,用的g++去编译,就会报错,说‘strtod_l’在此作用域中尚未声明。这个是gcc和g++编译器的差异。根本原因在于stdlib.h确实有声明这个函数,libc库确实有这个函数实现,但是stdlib里的声明上却有一个宏来控制,如下:
  #if __GNU_VISIBLE
  double strtod_l (const char *__restrict, char **__restrict, locale_t);
  float strtof_l (const char *__restrict, char **__restrict, locale_t);
  而__GNU_VISIBLE又受__GNU_SOURCE的控制,而在编译时,这个宏默认是不打开的,所以就产生了有定义无声明,gcc检测有,g++编译报错的问题。
那么解决这个问题的方法就是,修改gcc检测根据监测结果后生成的config.h,将这个文件里的对应的声明修改。如下:
  #define HAVE_STRTOD_L 1
  修改为
  //#define HAVE_STRTOD_L 1

#define HAVE_STRTOF_L 1
  修改为
  //#define HAVE_STRTOF_L 1

#define HAVE_STRTOLD_L 1
  修改为
  //#define HAVE_STRTOLD_L 1

3.编译安装
  #make
  #make install
  make install会将对应的工具安装到--prefixc参数指定的目录/usr/local/gsoap-utils。

附生成后gsoap SDK。

[email protected]_cpyb01 /usr/local/gsoap-utils
$ du -a
1392 ./bin/soapcpp2.exe
15836 ./bin/wsdl2h.exe
17228 ./bin
148 ./include/stdsoap2.h
148 ./include
908 ./lib/libgsoap++.a
564 ./lib/libgsoap.a
948 ./lib/libgsoapck++.a
596 ./lib/libgsoapck.a
1016 ./lib/libgsoapssl++.a
656 ./lib/libgsoapssl.a
1 ./lib/pkgconfig/gsoap++.pc
1 ./lib/pkgconfig/gsoap.pc
1 ./lib/pkgconfig/gsoapck++.pc
1 ./lib/pkgconfig/gsoapck.pc
1 ./lib/pkgconfig/gsoapssl++.pc
1 ./lib/pkgconfig/gsoapssl.pc
10 ./lib/pkgconfig
4702 ./lib
12 ./share/gsoap/custom/chrono_duration.cpp
4 ./share/gsoap/custom/chrono_duration.h
8 ./share/gsoap/custom/chrono_time_point.cpp
4 ./share/gsoap/custom/chrono_time_point.h
8 ./share/gsoap/custom/duration.c
4 ./share/gsoap/custom/duration.h
8 ./share/gsoap/custom/float128.c
4 ./share/gsoap/custom/float128.h
8 ./share/gsoap/custom/int128.c
4 ./share/gsoap/custom/int128.h
8 ./share/gsoap/custom/long_double.c
4 ./share/gsoap/custom/long_double.h
8 ./share/gsoap/custom/long_time.c
4 ./share/gsoap/custom/long_time.h
8 ./share/gsoap/custom/qbytearray_base64.cpp
4 ./share/gsoap/custom/qbytearray_base64.h
8 ./share/gsoap/custom/qbytearray_hex.cpp
4 ./share/gsoap/custom/qbytearray_hex.h
8 ./share/gsoap/custom/qdate.cpp
4 ./share/gsoap/custom/qdate.h
8 ./share/gsoap/custom/qdatetime.cpp
4 ./share/gsoap/custom/qdatetime.h
8 ./share/gsoap/custom/qstring.cpp
4 ./share/gsoap/custom/qstring.h
8 ./share/gsoap/custom/qtime.cpp
4 ./share/gsoap/custom/qtime.h
8 ./share/gsoap/custom/README.txt
8 ./share/gsoap/custom/struct_timeval.c
4 ./share/gsoap/custom/struct_timeval.h
8 ./share/gsoap/custom/struct_tm.c
8 ./share/gsoap/custom/struct_tm.h
8 ./share/gsoap/custom/struct_tm_date.c
4 ./share/gsoap/custom/struct_tm_date.h
216 ./share/gsoap/custom
4 ./share/gsoap/extras/ckdb.c
4 ./share/gsoap/extras/ckdb.h
4 ./share/gsoap/extras/ckdbtest.c
1 ./share/gsoap/extras/ckdbtest.h
4 ./share/gsoap/extras/fault.cpp
4 ./share/gsoap/extras/logging.cpp
1 ./share/gsoap/extras/README.txt
4 ./share/gsoap/extras/soapdefs.h
30 ./share/gsoap/extras
4 ./share/gsoap/import/c14n.h
4 ./share/gsoap/import/dom.h
20 ./share/gsoap/import/ds.h
20 ./share/gsoap/import/ds2.h
4 ./share/gsoap/import/plnk.h
4 ./share/gsoap/import/README.txt
4 ./share/gsoap/import/ref.h
80 ./share/gsoap/import/saml1.h
96 ./share/gsoap/import/saml2.h
1 ./share/gsoap/import/ser.h
4 ./share/gsoap/import/soap12.h
4 ./share/gsoap/import/stdstring.h
4 ./share/gsoap/import/stl.h
4 ./share/gsoap/import/stldeque.h
4 ./share/gsoap/import/stllist.h
4 ./share/gsoap/import/stlset.h
4 ./share/gsoap/import/stlvector.h
4 ./share/gsoap/import/vprop.h
4 ./share/gsoap/import/WS-example.c
4 ./share/gsoap/import/WS-example.h
4 ./share/gsoap/import/WS-Header.h

时间: 2024-10-09 01:39:02

Cygwin下编译gsoap 2.8.46的相关文章

cygwin下编译zlib源码

本文介绍在cygwin下编译zlib源码的方法步骤,这个过程虽然简单,但还是有一些需要注意的地方. zlib源码下载地址: http://www.zlib.net/ 下载后,解压就会生成zlib-1.2.8这种文件夹. 1. 编译步骤: 首先,创建一个文件夹,用configure命令指定编译结果到这个文件夹. 其次,make 最后,make install 当然,也可以将最后两步合并为 make & make install 2. 为加深印象,特帖实践过程如下: $ pwd /cygdrive/

Cygwin下编译的程序不使用Cygwin.dll即可运行的命令 及常用命令简介

cc -mno-cygwin foo.c 1.$ ps PS的相关用法: QuoteUsage ps [-aefl] [-u uid]-f = show process uids, ppids-l = show process uids, ppids, pgids, winpids-u uid = list processes owned by uid-a, -e = show processes of all users-s = show process summary-W = show wi

Windows环境下使用cygwin ndk_r9c编译FFmpeg

 一.废话 最近学习,第一步就是编译.我们需要编译FFmpag,x264,fdk_aac,一步步来.先来讲一下FFmpeg,网上说的很多都是几百年前的,我亲测完美可用 联系我可以直接评论,也可以加我QQ:11635423  二.干货  我能力有限,但是我希望我写的东西能够让更多的人能够接受.我也是刚刚接触.做一个记录,也希望能够对其他人有好处. 几个概念理解一下:不理解也没关系.用了之后再说慢慢就理解了.主要是因为我们是windows 先是cygwin下的一些概念:        unix st

Windows环境下使用cygwin ndk_r9c编译x264

 一.废话 最近学习,第一步就是编译.我们需要编译FFmpag,x264,fdk_aac,下面是x264,网上说的很多都是几百年前的,我亲测完美可用 还是那句话 我能力有限,但是我希望我写的东西能够让更多的人能够接受.我也是刚刚接触.做一个记录,也希望能够对其他人有好处.联系我可以直接评论,也可以加我QQ:11635423  二.干货  准备:1.x264的源码 2.cygwin下载,安装,这个网上基本都有.我不讲太多.git cygdrive bash make 这几个都需要下载 3.ndk我

CentOS 6.5下编译安装httpd+mysql+php+phpMyAdmin

CentOS 6.5下编译安装httpd+mysql+php+phpMyAdmin+cacti+nagios 一.安装环境 Linux系统:CentOS 6.5 Apache版本:http-2.4.12 MySQL版本:MySQL 5.6.24 PHP版本:PHP-5.6.8 基本的安装顺序为:先安装httpd,然后安装mysql,最后安装PHP. 软件包: [[email protected] httpdbao]# ll total 334908 -rwxrw-rw-. 1 root root

windows下编译及使用libevent

Libevent官网:http://libevent.org/ windows 7下编译: 编译环境: windows 7 + VS2010 (1)解压libevent到F:\libevent\libevent-2.0.21-stable (2)打开Microsoft visual studio 2010命令行工具 (3)修改以下三个文件,添加宏定义: 在以下3个文件开头添加“#define _WIN32_WINNT 0x0500” libevent-2.0.21-stable\event_io

在ubuntu12.04下编译android4.1.2添加JNI层出现问题

tiny4412学习者,在ubuntu12.04下编译android4.1.2添加JNI层出现问题: (虚心请教解决方法) trouble writing output: Too many methods: 65540; max is 65536. By package: 26 android 145 android.accessibilityservice 702 android.accounts 436 android.animation 8 android.annotation 3793

NTP 4.2.8p9在cygwin下的交叉编译

简介:NTP(Network Time Protocol)是指网络时间协议,是PC.手持设备.其他终端或者服务器来校准时间的协议.如,windows和linux系统都有对应的时间校准,使用的都是NTP协议.NTP协议的基于C来实现,代码跨平台,可在windows.linux以及其他平台上编译运行.NTP的官方协议实现库,当前最新版本是4.2.8p9.NTP4.2.8p9出于安全性的考虑,该版本依赖于openssl的库,经笔者试验openssl 0.98的版本支持不了,用openssl1.1.0e

cuda-convnet windows8下编译

编译环境: windows8.1 Anaconda python2.7 Visual studio 2012 CUDA6.0 Pthread for windows Intel Math Kernel Library   cuda-convnet 原始文件下载地址: https://github.com/dnouri/cuda-convnet/ 其中用到的一些库: PThread 下载链接: ftp://sourceware.org/pub/pthreads-win32/pthreads-w32