Компиляция GSOAP на cygwin в качестве разделяемой библиотеки: неопределенная ссылка / перемещение усечены до соответствия - PullRequest
0 голосов
/ 28 июня 2019

Я хотел бы скомпилировать gsoap на cygwin как общую библиотеку. Компиляция как статическая уже работает. Тем не менее, я хотел бы иметь ее как общую библиотеку ввиду другого проекта, использующего ее (kopano-core).

Я использую Cygports. Соответствующий файл cygport выглядит так:

# package name
NAME="gsoap"
VERSION=2.8.84
RELEASE=1

# .hint generation
CATEGORY="Libs"
SUMMARY='Development toolkit for Web Services and XML data bindings for C & C++'
DESCRIPTION='The gSOAP toolkit is an extensive suite of portable C and C++ software to develop XML Web services with powerful type-safe XML data bindings. Easy-to-use code-generator tools allow you to directly integrate XML data in C and C++. Serializes native application data in XML. Includes WSDL/XSD schema binding and auto-coding tools, stub/skeleton compiler, Web server integration with Apache module and IIS extension, high-performance XML processing with schema validation, fast MIME/MTOM streaming, SOAP and REST Web API development, WS-* protocols (WS-Security, WS-Policy, WS-ReliableMessaging, etc), XML-RPC and JSON. Licensed under GPLv2.'

# source and patch files
SRC_URI="https://downloads.sourceforge.net/gsoap2/gsoap_${VERSION}.zip"
PATCH_URI="gethostbyname.patch automake.patch sharedlibs.patch"
SRC_DIR="gsoap-2.8"

export CPPFLAGS="${CPPFLAGS} -D_GNU_SOURCE -Wno-attributes"
export CFLAGS="${CFLAGS} -D_GNU_SOURCE -Wno-attributes"

CYGCONF_ARGS="--disable-static --disable-samples"

MAKEOPTS="-j1"

prepare() {
        cd "${S}"
        cmp gsoap/stdsoap2.cpp gsoap/stdsoap2.c
        ln -fs stdsoap2.cpp gsoap/stdsoap2.c
}

src_compile() {
        cd ${S}
        cygautoreconf
        cd ${B}
        mkdir -p gsoap
        cp "${S}"/gsoap/*.sym "${B}"/gsoap/
        cygconf
        cygmake
}

Патчи:

automake.patch

--- configure.ac
+++ configure.ac
@@ -4,8 +4,7 @@ AM_INIT_AUTOMAKE([foreign])
 AC_CONFIG_SRCDIR([gsoap/stdsoap2.cpp])
 AC_CANONICAL_HOST

-# AC_CONFIG_HEADERS([config.h])
-AM_CONFIG_HEADER(config.h)
+AC_CONFIG_HEADERS([config.h])

 # we use subdirs.
 AC_PROG_MAKE_SET

gethostbyname.patch

--- gsoap/stdsoap2.cpp  2019-06-23 23:02:53.184350000 +0200
+++ gsoap/stdsoap2.cpp  2019-06-23 23:03:14.586754700 +0200
@@ -5101,21 +5101,6 @@
     hostent = NULL;
     soap->errnum = h_errno;
   }
-#elif defined(__GLIBC__) && (!_GNU_SOURCE && !defined(_POSIX_C_SOURCE) && !defined (_XOPEN_SOURCE) && defined(HAVE_GETHOSTBYNAME_R)) || _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600 || defined(__ANDROID__) || (defined(HAVE_GETHOSTBYNAME_R) && (defined(FREEBSD) || defined(__FreeBSD__)))
-  while ((r = gethostbyname_r(addr, hostent, tmpbuf, tmplen, &hostent, &soap->errnum)) < 0)
-  {
-    if (tmpbuf != soap->tmpbuf)
-      SOAP_FREE(soap, tmpbuf);
-    if (r != SOAP_ERANGE)
-    {
-      hostent = NULL;
-      break;
-    }
-    tmplen *= 2;
-    tmpbuf = (char*)SOAP_MALLOC(soap, tmplen);
-    if (!tmpbuf)
-      break;
-  }
 #elif defined(HAVE_GETHOSTBYNAME_R)
   hostent = gethostbyname_r(addr, hostent, tmpbuf, tmplen, &soap->errnum);
 #elif defined(VXWORKS)
--- gsoap/stdsoap2.c    2019-06-23 23:02:47.754685100 +0200
+++ gsoap/stdsoap2.c    2019-06-23 23:03:27.967663300 +0200
@@ -5101,21 +5101,6 @@
     hostent = NULL;
     soap->errnum = h_errno;
   }
-#elif defined(__GLIBC__) && (!_GNU_SOURCE && !defined(_POSIX_C_SOURCE) && !defined (_XOPEN_SOURCE) && defined(HAVE_GETHOSTBYNAME_R)) || _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600 || defined(__ANDROID__) || (defined(HAVE_GETHOSTBYNAME_R) && (defined(FREEBSD) || defined(__FreeBSD__)))
-  while ((r = gethostbyname_r(addr, hostent, tmpbuf, tmplen, &hostent, &soap->errnum)) < 0)
-  {
-    if (tmpbuf != soap->tmpbuf)
-      SOAP_FREE(soap, tmpbuf);
-    if (r != SOAP_ERANGE)
-    {
-      hostent = NULL;
-      break;
-    }
-    tmplen *= 2;
-    tmpbuf = (char*)SOAP_MALLOC(soap, tmplen);
-    if (!tmpbuf)
-      break;
-  }
 #elif defined(HAVE_GETHOSTBYNAME_R)
   hostent = gethostbyname_r(addr, hostent, tmpbuf, tmplen, &soap->errnum);
 #elif defined(VXWORKS)
--- gsoap/src/symbol2.c 2019-06-23 23:20:34.866989800 +0200
+++ gsoap/src/symbol2.c 2019-06-23 23:19:29.828384800 +0200
@@ -37,7 +37,7 @@
 #include "soapcpp2.h"

 #ifdef HAVE_CONFIG_H
-#include "soapcpp2_yacc.h"
+#include "soapcpp2_yacc.tab.h"
 #else
 #include "soapcpp2_yacc.tab.h"
 #endif

sharedlibs.patch

--- configure.ac
+++ configure.ac
@@ -15,8 +15,8 @@ AM_PROG_CC_C_O
 AM_PROG_LEX
 AC_PROG_YACC
 AC_PROG_CPP
-AC_PROG_RANLIB
-#AM_PROG_LIBTOOL
+m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
+LT_INIT([dlopen win32-dll disable-static])
 AC_PROG_LN_S
 AC_PROG_AWK
 AC_PROG_INSTALL
@@ -294,7 +294,7 @@ if test "x$with_openssl" = "xyes"; then
     WSDL2H_EXTRA_LIBS="${WSDL2H_EXTRA_LIBS} -lgnutls -lgcrypt -lgpg-error -lz"
     SAMPLE_INCLUDES=
     SAMPLE_SSL_LIBS="-lgnutls -lgcrypt -lgpg-error -lz"
-    WSDL2H_SOAP_CPP_LIB="libgsoapssl++.a"
+    WSDL2H_SOAP_CPP_LIB="libgsoapssl++.la"
   else
     AC_MSG_RESULT(no)
     WSDL2H_EXTRA_FLAGS="-DWITH_OPENSSL -DWITH_GZIP"
@@ -302,7 +302,7 @@ if test "x$with_openssl" = "xyes"; then
     WSDL2H_EXTRA_LIBS="${WSDL2H_EXTRA_LIBS} -lssl -lcrypto -lz"
     SAMPLE_INCLUDES=
     SAMPLE_SSL_LIBS="-lssl -lcrypto -lz"
-    WSDL2H_SOAP_CPP_LIB="libgsoapssl++.a"
+    WSDL2H_SOAP_CPP_LIB="libgsoapssl++.la"
   fi
   if test -n "$ZLIB"; then
     WSDL2H_EXTRA_FLAGS="-I${ZLIB}/include ${WSDL2H_EXTRA_FLAGS}"
@@ -321,7 +321,7 @@ else
   WSDL2H_EXTRA_FLAGS=
   SAMPLE_SSL_LIBS=
   SAMPLE_INCLUDES=
-  WSDL2H_SOAP_CPP_LIB="libgsoap++.a"
+  WSDL2H_SOAP_CPP_LIB="libgsoap++.la"
 fi
 AM_CONDITIONAL(WITH_OPENSSL, test "x$with_openssl" = "xyes" -a "x$with_gnutls" != "xyes")
 AC_SUBST(WITH_OPENSSL)
--- gsoap/Makefile.am
+++ gsoap/Makefile.am
@@ -34,20 +34,34 @@ stdsoap2_ssl_cpp.cpp: stdsoap2.cpp
 dom_cpp.cpp: dom.cpp
        $(LN_S) -f $(top_srcdir)/gsoap/dom.cpp dom_cpp.cpp

-lib_LIBRARIES = libgsoap.a libgsoap++.a libgsoapck.a libgsoapck++.a libgsoapssl.a libgsoapssl++.a
+lib_LTLIBRARIES = libgsoap.la libgsoap++.la libgsoapck.la libgsoapck++.la libgsoapssl.la libgsoapssl++.la

-libgsoap_a_SOURCES = stdsoap2.c dom.c
-libgsoap_a_CFLAGS = $(SOAPCPP2_DEBUG) $(SOAPCPP2_NONAMESPACES) $(SOAPCPP2_NO_C_LOCALE) $(SOAPCPP2_IPV6) $(SOAPCPP2_IPV6_V6ONLY) -D$(platform)
-libgsoap___a_SOURCES = stdsoap2_cpp.cpp dom_cpp.cpp
-libgsoap___a_CXXFLAGS = $(SOAPCPP2_DEBUG) $(SOAPCPP2_NONAMESPACES) $(SOAPCPP2_NO_C_LOCALE) $(SOAPCPP2_IPV6) $(SOAPCPP2_IPV6_V6ONLY) -D$(platform)
-libgsoapck_a_SOURCES = stdsoap2_ck.c dom.c
-libgsoapck_a_CFLAGS = $(SOAPCPP2_DEBUG) $(SOAPCPP2_NONAMESPACES) $(SOAPCPP2_NO_C_LOCALE) $(SOAPCPP2_IPV6) $(SOAPCPP2_IPV6_V6ONLY) -D$(platform) -DWITH_COOKIES
-libgsoapck___a_SOURCES = stdsoap2_ck_cpp.cpp dom_cpp.cpp
-libgsoapck___a_CXXFLAGS = $(SOAPCPP2_DEBUG) $(SOAPCPP2_NONAMESPACES) $(SOAPCPP2_NO_C_LOCALE) $(SOAPCPP2_IPV6) $(SOAPCPP2_IPV6_V6ONLY) -D$(platform) -DWITH_COOKIES
-libgsoapssl_a_SOURCES = stdsoap2_ssl.c dom.c
-libgsoapssl_a_CFLAGS = $(SOAPCPP2_DEBUG) $(SOAPCPP2_NONAMESPACES) $(SOAPCPP2_NO_C_LOCALE) $(SOAPCPP2_IPV6) $(SOAPCPP2_IPV6_V6ONLY) -D$(platform) $(WSDL2H_EXTRA_FLAGS) -DWITH_DOM -DWITH_COOKIES
-libgsoapssl___a_SOURCES = stdsoap2_ssl_cpp.cpp dom_cpp.cpp
-libgsoapssl___a_CXXFLAGS = $(SOAPCPP2_DEBUG) $(SOAPCPP2_NONAMESPACES) $(SOAPCPP2_NO_C_LOCALE) $(SOAPCPP2_IPV6) $(SOAPCPP2_IPV6_V6ONLY) -D$(platform) $(WSDL2H_EXTRA_FLAGS) -DWITH_DOM -DWITH_COOKIES
+libgsoap_la_SOURCES = stdsoap2.c dom.c
+libgsoap_la_CFLAGS = $(SOAPCPP2_DEBUG) $(SOAPCPP2_NONAMESPACES) $(SOAPCPP2_NO_C_LOCALE) $(SOAPCPP2_IPV6) $(SOAPCPP2_IPV6_V6ONLY) -D$(platform)
+libgsoap___la_SOURCES = stdsoap2_cpp.cpp dom_cpp.cpp
+libgsoap___la_CXXFLAGS = $(SOAPCPP2_DEBUG) $(SOAPCPP2_NONAMESPACES) $(SOAPCPP2_NO_C_LOCALE) $(SOAPCPP2_IPV6) $(SOAPCPP2_IPV6_V6ONLY) -D$(platform)
+libgsoapck_la_SOURCES = stdsoap2_ck.c dom.c
+libgsoapck_la_CFLAGS = $(SOAPCPP2_DEBUG) $(SOAPCPP2_NONAMESPACES) $(SOAPCPP2_NO_C_LOCALE) $(SOAPCPP2_IPV6) $(SOAPCPP2_IPV6_V6ONLY) -D$(platform) -DWITH_COOKIES
+libgsoapck___la_SOURCES = stdsoap2_ck_cpp.cpp dom_cpp.cpp
+libgsoapck___la_CXXFLAGS = $(SOAPCPP2_DEBUG) $(SOAPCPP2_NONAMESPACES) $(SOAPCPP2_NO_C_LOCALE) $(SOAPCPP2_IPV6) $(SOAPCPP2_IPV6_V6ONLY) -D$(platform) -DWITH_COOKIES
+libgsoapssl_la_SOURCES = stdsoap2_ssl.c dom.c
+libgsoapssl_la_CFLAGS = $(SOAPCPP2_DEBUG) $(SOAPCPP2_NONAMESPACES) $(SOAPCPP2_NO_C_LOCALE) $(SOAPCPP2_IPV6) $(SOAPCPP2_IPV6_V6ONLY) -D$(platform) $(WSDL2H_EXTRA_FLAGS) -DWITH_DOM -DWITH_COOKIES
+libgsoapssl___la_SOURCES = stdsoap2_ssl_cpp.cpp dom_cpp.cpp
+libgsoapssl___la_CXXFLAGS = $(SOAPCPP2_DEBUG) $(SOAPCPP2_NONAMESPACES) $(SOAPCPP2_NO_C_LOCALE) $(SOAPCPP2_IPV6) $(SOAPCPP2_IPV6_V6ONLY) -D$(platform) $(WSDL2H_EXTRA_FLAGS) -DWITH_DOM -DWITH_COOKIES
+libgsoap_la_LDFLAGS = -release ${PACKAGE_VERSION} -Wl,--version-script=gsoap.sym -no-undefined -module
+libgsoap___la_LDFLAGS = -release ${PACKAGE_VERSION} -Wl,--version-script=gsoap++.sym -no-undefined -module
+libgsoapck_la_LDFLAGS = -release ${PACKAGE_VERSION} -Wl,--version-script=gsoapck.sym -no-undefined -module
+libgsoapck___la_LDFLAGS = -release ${PACKAGE_VERSION} -Wl,--version-script=gsoapck++.sym -no-undefined -module
+libgsoapssl_la_LDFLAGS = -release ${PACKAGE_VERSION} -Wl,--version-script=gsoapssl.sym -no-undfined -module
+libgsoapssl_la_LIBADD = ${SAMPLE_SSL_LIBS}
+libgsoapssl___la_LDFLAGS = -release ${PACKAGE_VERSION} -Wl,--version-script=gsoapssl++.sym -no-undefined -module
+libgsoapssl___la_LIBADD = ${libgsoapssl_la_LIBADD}
+EXTRA_libgsoap_la_DEPENDENCIES = gsoap.sym
+EXTRA_libgsoap___la_DEPENDENCIES = gsoap++.sym
+EXTRA_libgsoapck_la_DEPENDENCIES = gsoapck.sym
+EXTRA_libgsoapck___la_DEPENDENCIES = gsoapck++.sym
+EXTRA_libgsoapssl_la_DEPENDENCIES = gsoapssl.sym
+EXTRA_libgsoapssl___la_DEPENDENCIES = gsoapssl++.sym

 BUILT_SOURCES = stdsoap2_cpp.cpp dom_cpp.cpp stdsoap2_ck.c stdsoap2_ck_cpp.cpp stdsoap2_ssl.c stdsoap2_ssl_cpp.cpp

--- /dev/null
+++ gsoap/gsoap++.sym
@@ -0,0 +1 @@
+GSOAPXX { global: *; };
--- /dev/null
+++ gsoap/gsoap.sym
@@ -0,0 +1 @@
+GSOAP { global: *; };
--- /dev/null
+++ gsoap/gsoapck++.sym
@@ -0,0 +1 @@
+GSOAPCKXX { global: *; };
--- /dev/null
+++ gsoap/gsoapck.sym
@@ -0,0 +1 @@
+GSOAPCK { global: *; };
--- /dev/null
+++ gsoap/gsoapckssl++.sym
@@ -0,0 +1 @@
+GSOAPCKSSLXX { global: *; };
--- /dev/null
+++ gsoap/gsoapckssl.sym
@@ -0,0 +1 @@
+GSOAPCKSSL { global: *; };
--- /dev/null
+++ gsoap/gsoapssl++.sym
@@ -0,0 +1 @@
+GSOAPSSLXX { global: *; };
--- /dev/null
+++ gsoap/gsoapssl.sym
@@ -0,0 +1 @@
+GSOAPSSL { global: *; };

Идея основана на пакете opensuse:

https://build.opensuse.org/package/show/openSUSE:Factory/gsoap

Этот пакет также компилируется в (так) совместно используемую библиотеку.

В дополнение к изменениям, сделанным в этом пакете, я добавил: -no-defined -module

к соответствующим разделам LDFLAGS в патче. Это нужно Cygwin gcc.

Кроме того, я изменил LT_INIT в файле configure.ac, чтобы он соответствовал Cygwin.

Когда я пытаюсь скомпилировать пакет (cygport gsoap.cygport fetch && cygport gsoap.cygport all), он выдает следующее сообщение:

make  all-recursive
make[1]: Entering directory '/home/gsoap-shared/gsoap-2.8.84-1.x86_64/build'
Making all in .
make[2]: Entering directory '/home/gsoap-shared/gsoap-2.8.84-1.x86_64/build'
make[2]: Leaving directory '/home/gsoap-shared/gsoap-2.8.84-1.x86_64/build'
Making all in gsoap
make[2]: Entering directory '/home/gsoap-shared/gsoap-2.8.84-1.x86_64/build/gsoap'
ln -s -f /home/gsoap-shared/gsoap-2.8.84-1.x86_64/src/gsoap-2.8/gsoap/stdsoap2.cpp stdsoap2_cpp.cpp
ln -s -f /home/gsoap-shared/gsoap-2.8.84-1.x86_64/src/gsoap-2.8/gsoap/dom.cpp dom_cpp.cpp
ln -s -f /home/gsoap-shared/gsoap-2.8.84-1.x86_64/src/gsoap-2.8/gsoap/stdsoap2.cpp stdsoap2_ck.c
ln -s -f /home/gsoap-shared/gsoap-2.8.84-1.x86_64/src/gsoap-2.8/gsoap/stdsoap2.cpp stdsoap2_ck_cpp.cpp
ln -s -f /home/gsoap-shared/gsoap-2.8.84-1.x86_64/src/gsoap-2.8/gsoap/stdsoap2.cpp stdsoap2_ssl.c
ln -s -f /home/gsoap-shared/gsoap-2.8.84-1.x86_64/src/gsoap-2.8/gsoap/stdsoap2.cpp stdsoap2_ssl_cpp.cpp
make  all-recursive
make[3]: Entering directory '/home/gsoap-shared/gsoap-2.8.84-1.x86_64/build/gsoap'
Making all in .
make[4]: Entering directory '/home/gsoap-shared/gsoap-2.8.84-1.x86_64/build/gsoap'
/bin/sh ../libtool  --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I/home/gsoap-shared/gsoap-2.8.84-1.x86_64/src/gsoap-2.8/gsoap -I..   -D_GNU_SOURCE -Wno-attributes      -DCYGWIN -ggdb -O2 -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector-strong --param=ssp-buffer-size=4 -D_GNU_SOURCE -Wno-attributes -fdebug-prefix-map=/home/gsoap-shared/gsoap-2.8.84-1.x86_64/build=/usr/src/debug/gsoap-2.8.84-1 -fdebug-prefix-map=/home/gsoap-shared/gsoap-2.8.84-1.x86_64/src/gsoap-2.8=/usr/src/debug/gsoap-2.8.84-1 -MT libgsoap_la-stdsoap2.lo -MD -MP -MF .deps/libgsoap_la-stdsoap2.Tpo -c -o libgsoap_la-stdsoap2.lo `test -f 'stdsoap2.c' || echo '/home/gsoap-shared/gsoap-2.8.84-1.x86_64/src/gsoap-2.8/gsoap/'`stdsoap2.c
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I/home/gsoap-shared/gsoap-2.8.84-1.x86_64/src/gsoap-2.8/gsoap -I.. -D_GNU_SOURCE -Wno-attributes -DCYGWIN -ggdb -O2 -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector-strong --param=ssp-buffer-size=4 -D_GNU_SOURCE -Wno-attributes -fdebug-prefix-map=/home/gsoap-shared/gsoap-2.8.84-1.x86_64/build=/usr/src/debug/gsoap-2.8.84-1 -fdebug-prefix-map=/home/gsoap-shared/gsoap-2.8.84-1.x86_64/src/gsoap-2.8=/usr/src/debug/gsoap-2.8.84-1 -MT libgsoap_la-stdsoap2.lo -MD -MP -MF .deps/libgsoap_la-stdsoap2.Tpo -c /home/gsoap-shared/gsoap-2.8.84-1.x86_64/src/gsoap-2.8/gsoap/stdsoap2.c  -DDLL_EXPORT -DPIC -o .libs/libgsoap_la-stdsoap2.o
/home/gsoap-shared/gsoap-2.8.84-1.x86_64/src/gsoap-2.8/gsoap/stdsoap2.c: In function 'tcp_gethostbyname':
/home/gsoap-shared/gsoap-2.8.84-1.x86_64/src/gsoap-2.8/gsoap/stdsoap2.c:5074:10: warning: unused variable 'tmplen' [-Wunused-variable]
   size_t tmplen = sizeof(soap->tmpbuf);
          ^~~~~~
/home/gsoap-shared/gsoap-2.8.84-1.x86_64/src/gsoap-2.8/gsoap/stdsoap2.c:5073:9: warning: unused variable 'tmpbuf' [-Wunused-variable]
   char *tmpbuf = soap->tmpbuf;
         ^~~~~~
/home/gsoap-shared/gsoap-2.8.84-1.x86_64/src/gsoap-2.8/gsoap/stdsoap2.c:5072:7: warning: unused variable 'r' [-Wunused-variable]
   int r;
       ^
/home/gsoap-shared/gsoap-2.8.84-1.x86_64/src/gsoap-2.8/gsoap/stdsoap2.c: In function 'soap_strerror':
/home/gsoap-shared/gsoap-2.8.84-1.x86_64/src/gsoap-2.8/gsoap/stdsoap2.c:22334:9: warning: assignment makes integer from pointer without a cast [-Wint-conversion]
     err = strerror_r(err, soap->msgbuf, sizeof(soap->msgbuf)); /* XSI-compliant */
         ^
mv -f .deps/libgsoap_la-stdsoap2.Tpo .deps/libgsoap_la-stdsoap2.Plo
/bin/sh ../libtool  --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I/home/gsoap-shared/gsoap-2.8.84-1.x86_64/src/gsoap-2.8/gsoap -I..   -D_GNU_SOURCE -Wno-attributes      -DCYGWIN -ggdb -O2 -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector-strong --param=ssp-buffer-size=4 -D_GNU_SOURCE -Wno-attributes -fdebug-prefix-map=/home/gsoap-shared/gsoap-2.8.84-1.x86_64/build=/usr/src/debug/gsoap-2.8.84-1 -fdebug-prefix-map=/home/gsoap-shared/gsoap-2.8.84-1.x86_64/src/gsoap-2.8=/usr/src/debug/gsoap-2.8.84-1 -MT libgsoap_la-dom.lo -MD -MP -MF .deps/libgsoap_la-dom.Tpo -c -o libgsoap_la-dom.lo `test -f 'dom.c' || echo '/home/gsoap-shared/gsoap-2.8.84-1.x86_64/src/gsoap-2.8/gsoap/'`dom.c
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I/home/gsoap-shared/gsoap-2.8.84-1.x86_64/src/gsoap-2.8/gsoap -I.. -D_GNU_SOURCE -Wno-attributes -DCYGWIN -ggdb -O2 -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector-strong --param=ssp-buffer-size=4 -D_GNU_SOURCE -Wno-attributes -fdebug-prefix-map=/home/gsoap-shared/gsoap-2.8.84-1.x86_64/build=/usr/src/debug/gsoap-2.8.84-1 -fdebug-prefix-map=/home/gsoap-shared/gsoap-2.8.84-1.x86_64/src/gsoap-2.8=/usr/src/debug/gsoap-2.8.84-1 -MT libgsoap_la-dom.lo -MD -MP -MF .deps/libgsoap_la-dom.Tpo -c /home/gsoap-shared/gsoap-2.8.84-1.x86_64/src/gsoap-2.8/gsoap/dom.c  -DDLL_EXPORT -DPIC -o .libs/libgsoap_la-dom.o
mv -f .deps/libgsoap_la-dom.Tpo .deps/libgsoap_la-dom.Plo
/bin/sh ../libtool  --tag=CC   --mode=link gcc      -DCYGWIN -ggdb -O2 -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector-strong --param=ssp-buffer-size=4 -D_GNU_SOURCE -Wno-attributes -fdebug-prefix-map=/home/gsoap-shared/gsoap-2.8.84-1.x86_64/build=/usr/src/debug/gsoap-2.8.84-1 -fdebug-prefix-map=/home/gsoap-shared/gsoap-2.8.84-1.x86_64/src/gsoap-2.8=/usr/src/debug/gsoap-2.8.84-1 -release 2.8.84 -Wl,--version-script=gsoap.sym -no-undefined -module  -o libgsoap.la -rpath /usr/lib libgsoap_la-stdsoap2.lo libgsoap_la-dom.lo
libtool: link: gcc -shared  .libs/libgsoap_la-stdsoap2.o .libs/libgsoap_la-dom.o    -ggdb -O2 -fstack-protector-strong -Wl,--version-script=gsoap.sym   -o .libs/cyggsoap-2-8-84.dll -Wl,--enable-auto-image-base -Xlinker --out-implib -Xlinker .libs/libgsoap.dll.a
.libs/libgsoap_la-stdsoap2.o: In function `soap_set_error':
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:22420: undefined reference to `soap_faultcode'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:22420:(.text+0x648): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `soap_faultcode'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:22422: undefined reference to `soap_faultsubcode'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:22422:(.text+0x658): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `soap_faultsubcode'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:22423: undefined reference to `soap_faultstring'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:22423:(.text+0x663): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `soap_faultstring'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:22426: undefined reference to `soap_faultdetail'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:22426:(.text+0x694): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `soap_faultdetail'
.libs/libgsoap_la-stdsoap2.o: In function `soap_recv_header':
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:21004: undefined reference to `soap_getheader'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:21004:(.text+0x19ef9): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `soap_getheader'
.libs/libgsoap_la-stdsoap2.o: In function `http_response':
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:8196: undefined reference to `soap_faultcode'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:8196:(.text+0x1b524): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `soap_faultcode'
.libs/libgsoap_la-stdsoap2.o: In function `soap_set_fault':
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:21820: undefined reference to `soap_faultcode'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:21820:(.text+0x1bb69): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `soap_faultcode'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:21821: undefined reference to `soap_faultstring'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:21821:(.text+0x1bb74): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `soap_faultstring'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:21930: undefined reference to `soap_faultsubcode'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:21930:(.text+0x1c225): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `soap_faultsubcode'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:21935: undefined reference to `soap_faultsubcode'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:21935:(.text+0x1c260): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `soap_faultsubcode'
.libs/libgsoap_la-stdsoap2.o: In function `soap_recv_fault':
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:22210: undefined reference to `soap_getfault'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:22210:(.text+0x1c520): additional relocation overflows omitted from the output
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:22210: undefined reference to `soap_getfault'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:22224: undefined reference to `soap_faultcode'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:22233: undefined reference to `soap_faultcode'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:22192: undefined reference to `soap_faultstring'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:22193: undefined reference to `soap_faultdetail'
.libs/libgsoap_la-stdsoap2.o: In function `soap_send_fault':
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:22118: undefined reference to `soap_serializeheader'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:22119: undefined reference to `soap_serializefault'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:22124: undefined reference to `soap_putheader'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:22126: undefined reference to `soap_putfault'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:22134: undefined reference to `soap_putheader'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:22136: undefined reference to `soap_putfault'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:22144: undefined reference to `soap_faultstring'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:22145: undefined reference to `soap_faultdetail'
.libs/libgsoap_la-stdsoap2.o: In function `soap_print_fault':
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:22524: undefined reference to `soap_faultcode'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:22532: undefined reference to `soap_fault_string'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:22533: undefined reference to `soap_fault_detail'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:22531: undefined reference to `soap_fault_subcode'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:22528: undefined reference to `soap_faultcode'
.libs/libgsoap_la-stdsoap2.o: In function `soap_sprint_fault':
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:22599: undefined reference to `soap_faultcode'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:22609: undefined reference to `soap_fault_string'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:22612: undefined reference to `soap_fault_detail'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:22606: undefined reference to `soap_fault_subcode'
/usr/src/debug/gsoap-2.8.84-1/gsoap/stdsoap2.c:22603: undefined reference to `soap_faultcode'
.libs/libgsoap_la-stdsoap2.o:stdsoap2.c:(.rdata$.refptr.namespaces[.refptr.namespaces]+0x0): undefined reference to `namespaces'
.libs/libgsoap_la-dom.o: In function `out_element':
/usr/src/debug/gsoap-2.8.84-1/gsoap/dom.c:274: undefined reference to `soap_putelement'
/usr/src/debug/gsoap-2.8.84-1/gsoap/dom.c:274: undefined reference to `soap_putelement'
.libs/libgsoap_la-dom.o: In function `soap_in_xsd__anyType':
/usr/src/debug/gsoap-2.8.84-1/gsoap/dom.c:652: undefined reference to `soap_getelement'
.libs/libgsoap_la-dom.o: In function `soap_dup_xsd__anyType':
/usr/src/debug/gsoap-2.8.84-1/gsoap/dom.c:826: undefined reference to `soap_dupelement'
.libs/libgsoap_la-dom.o: In function `soap_del_xsd__anyType':
/usr/src/debug/gsoap-2.8.84-1/gsoap/dom.c:869: undefined reference to `soap_delelement'
.libs/libgsoap_la-dom.o: In function `soap_serialize_xsd__anyType':
/usr/src/debug/gsoap-2.8.84-1/gsoap/dom.c:157: undefined reference to `soap_markelement'
collect2: error: ld returned 1 exit status
make[4]: *** [Makefile:574: libgsoap.la] Error 1
make[4]: Leaving directory '/home/gsoap-shared/gsoap-2.8.84-1.x86_64/build/gsoap'
make[3]: *** [Makefile:797: all-recursive] Error 1
make[3]: Leaving directory '/home/gsoap-shared/gsoap-2.8.84-1.x86_64/build/gsoap'
make[2]: *** [Makefile:501: all] Error 2
make[2]: Leaving directory '/home/gsoap-shared/gsoap-2.8.84-1.x86_64/build/gsoap'
make[1]: *** [Makefile:503: all-recursive] Error 1
make[1]: Leaving directory '/home/gsoap-shared/gsoap-2.8.84-1.x86_64/build'
make: *** [Makefile:402: all] Error 2

Тем не менее, символы, кажется, там:

objdump.exe -x gsoap/.libs/libgsoap_la-stdsoap2.o | grep soap_faultcode
[449](sec  0)(fl 0x00)(ty  20)(scl   2) (nx 0) 0x0000000000000000 soap_faultcode
0000000000000648 R_X86_64_PC32     soap_faultcode
000000000001b524 R_X86_64_PC32     soap_faultcode
000000000001bb69 R_X86_64_PC32     soap_faultcode
000000000001c5b5 R_X86_64_PC32     soap_faultcode
000000000001c5f4 R_X86_64_PC32     soap_faultcode
000000000001e5d1 R_X86_64_PC32     soap_faultcode
000000000001e69c R_X86_64_PC32     soap_faultcode
000000000001e723 R_X86_64_PC32     soap_faultcode
000000000001e7fc R_X86_64_PC32     soap_faultcode

Есть идеи, что пошло не так?

Я ожидаю, что пакет будет собран. Однако, похоже, что-то напутало.

Я немного повозился и узнал о опции -mcmodel = large compiler. Тем не менее, это дает мне:

make  all-recursive
make[1]: Entering directory '/home/gsoap-shared/gsoap-2.8.84-1.x86_64/build/gsoap'
Making all in .
make[2]: Entering directory '/home/gsoap-shared/gsoap-2.8.84-1.x86_64/build/gsoap'
/bin/sh ../libtool  --tag=CC   --mode=link gcc      -mcmodel=large -maddress-mode=long -DCYGWIN -ggdb -O2 -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector-strong --param=ssp-buffer-size=4 -D_GNU_SOURCE -Wno-attributes -fdebug-prefix-map=/home/gsoap-shared/gsoap-2.8.84-1.x86_64/build=/usr/src/debug/gsoap-2.8.84-1 -fdebug-prefix-map=/home/gsoap-shared/gsoap-2.8.84-1.x86_64/src/gsoap-2.8=/usr/src/debug/gsoap-2.8.84-1 -release 2.8.84 -Wl,--version-script=gsoap.sym -no-undefined     -o libgsoap.la -rpath /usr/lib libgsoap_la-stdsoap2.lo libgsoap_la-dom.lo
libtool: link: rm -fr  .libs/libgsoap.dll.a
libtool: link: gcc -shared  .libs/libgsoap_la-stdsoap2.o .libs/libgsoap_la-dom.o    -mcmodel=large -maddress-mode=long -ggdb -O2 -fstack-protector-strong -Wl,--version-script=gsoap.sym   -o .libs/cyggsoap-2-8-84.dll -Wl,--enable-auto-image-base -Xlinker --out-implib -Xlinker .libs/libgsoap.dll.a
.libs/libgsoap_la-stdsoap2.o:stdsoap2.c:(.rdata$.refptr.soap_fault_detail[.refptr.soap_fault_detail]+0x0): undefined reference to `soap_fault_detail'
.libs/libgsoap_la-stdsoap2.o:stdsoap2.c:(.rdata$.refptr.soap_fault_string[.refptr.soap_fault_string]+0x0): undefined reference to `soap_fault_string'
.libs/libgsoap_la-stdsoap2.o:stdsoap2.c:(.rdata$.refptr.soap_fault_subcode[.refptr.soap_fault_subcode]+0x0): undefined reference to `soap_fault_subcode'
.libs/libgsoap_la-stdsoap2.o:stdsoap2.c:(.rdata$.refptr.soap_putfault[.refptr.soap_putfault]+0x0): undefined reference to `soap_putfault'
.libs/libgsoap_la-stdsoap2.o:stdsoap2.c:(.rdata$.refptr.soap_putheader[.refptr.soap_putheader]+0x0): undefined reference to `soap_putheader'
.libs/libgsoap_la-stdsoap2.o:stdsoap2.c:(.rdata$.refptr.soap_serializefault[.refptr.soap_serializefault]+0x0): undefined reference to `soap_serializefault'
.libs/libgsoap_la-stdsoap2.o:stdsoap2.c:(.rdata$.refptr.soap_serializeheader[.refptr.soap_serializeheader]+0x0): undefined reference to `soap_serializeheader'
.libs/libgsoap_la-stdsoap2.o:stdsoap2.c:(.rdata$.refptr.soap_getfault[.refptr.soap_getfault]+0x0): undefined reference to `soap_getfault'
.libs/libgsoap_la-stdsoap2.o:stdsoap2.c:(.rdata$.refptr.soap_getheader[.refptr.soap_getheader]+0x0): undefined reference to `soap_getheader'
.libs/libgsoap_la-stdsoap2.o:stdsoap2.c:(.rdata$.refptr.namespaces[.refptr.namespaces]+0x0): undefined reference to `namespaces'
.libs/libgsoap_la-stdsoap2.o:stdsoap2.c:(.rdata$.refptr.soap_faultdetail[.refptr.soap_faultdetail]+0x0): undefined reference to `soap_faultdetail'
.libs/libgsoap_la-stdsoap2.o:stdsoap2.c:(.rdata$.refptr.soap_faultstring[.refptr.soap_faultstring]+0x0): undefined reference to `soap_faultstring'
.libs/libgsoap_la-stdsoap2.o:stdsoap2.c:(.rdata$.refptr.soap_faultsubcode[.refptr.soap_faultsubcode]+0x0): undefined reference to `soap_faultsubcode'
.libs/libgsoap_la-stdsoap2.o:stdsoap2.c:(.rdata$.refptr.soap_faultcode[.refptr.soap_faultcode]+0x0): undefined reference to `soap_faultcode'
.libs/libgsoap_la-dom.o:dom.c:(.rdata$.refptr.soap_delelement[.refptr.soap_delelement]+0x0): undefined reference to `soap_delelement'
.libs/libgsoap_la-dom.o:dom.c:(.rdata$.refptr.soap_dupelement[.refptr.soap_dupelement]+0x0): undefined reference to `soap_dupelement'
.libs/libgsoap_la-dom.o:dom.c:(.rdata$.refptr.soap_getelement[.refptr.soap_getelement]+0x0): undefined reference to `soap_getelement'
.libs/libgsoap_la-dom.o:dom.c:(.rdata$.refptr.soap_putelement[.refptr.soap_putelement]+0x0): undefined reference to `soap_putelement'
.libs/libgsoap_la-dom.o:dom.c:(.rdata$.refptr.soap_markelement[.refptr.soap_markelement]+0x0): undefined reference to `soap_markelement'
collect2: error: ld returned 1 exit status
make[2]: *** [Makefile:574: libgsoap.la] Error 1
make[2]: Leaving directory '/home/gsoap-shared/gsoap-2.8.84-1.x86_64/build/gsoap'
make[1]: *** [Makefile:797: all-recursive] Error 1
make[1]: Leaving directory '/home/gsoap-shared/gsoap-2.8.84-1.x86_64/build/gsoap'
make: *** [Makefile:501: all] Error 2

1 Ответ

0 голосов
/ 30 июня 2019

Для патча gethostbyname_r я рекомендую загрузить 2.8.86 и применить это изменение (2x):

#elif (!defined(__GLIBC__) || (!_GNU_SOURCE && !defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE)) || _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600 || defined(__ANDROID__) || defined(FREEBSD) || defined(__FreeBSD__)) && defined(HAVE_GETHOSTBYNAME_R)

и это (2x):

#if (!defined(__GLIBC__) || (!_GNU_SOURCE && !defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE)) || _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600 || defined(__ANDROID__) || defined(FREEBSD) || defined(__FreeBSD__)) && defined(HAVE_GETHOSTBYNAME_R)

Применено оба(то есть 4 изменения) в tcp_connect().

soap_faultcode и другие функции не определены в stdsoap2.c, но на них ссылаются в stdsoap2.c и должны быть связаны с кодом, сгенерированным soapcpp2, например soapC.c которые определяют эти функции.Эти функции зависят от способа объявления структуры SOAP_ENV__Fault (в файле .h для soapcpp2), и поэтому эти функции невозможно интегрировать и исправить в библиотеке stdsoap2.c, так как структура может меняться в зависимости от приложения (например, SOAP_ENV_Detail может иметьдополнительные члены структуры).

...