Navigation

    Kopano
    • Register
    • Login
    • Search
    • Categories
    • Get Official Kopano Support
    • Recent
    Statement regarding the closure of the Kopano community forum and the end of the community edition

    SOLVED: Compilation on cygwin - Problems with missing symbols in vmime

    Kopano Groupware Core
    2
    3
    226
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • marlemion
      marlemion last edited by marlemion

      Hi! Based on this post: https://forum.kopano.io/topic/2526/kopano-core-python-libraries-on-windows I am trying since a few days now to compile kopano-core on cygwin. Cygwin provides nearly all of the dependencies. I just had to compile and package libHX, gSOAP and, well, vmime.

      Vmime has been taken from the kopano git in Version 0.9.2. The kopano-core version to compile is 8.7.1.

      So far everything is ok, vmime is found by configure. But when it comes to linking libkcinetmapi.a, the Script bails out:

      CXX      inetmapi/ECMapiUtils.lo
      CXX      inetmapi/ECVMIMEUtils.lo
      CXX      inetmapi/MAPISMTPTransport.lo
      CXX      inetmapi/MAPIToVMIME.lo
      CXX      inetmapi/SMIMEMessage.lo
      CXX      inetmapi/VMIMEToMAPI.lo
      CXX      inetmapi/inetmapi.lo
      CXX      inetmapi/inputStreamMAPIAdapter.lo
      CXX      inetmapi/mapiAttachment.lo
      CXX      inetmapi/mapiTextPart.lo
      CXXLD    libkcinetmapi.la
      inetmapi/.libs/MAPISMTPTransport.o: In function `vmime::net::smtp::MAPISMTPTransport::helo()':
      /usr/src/debug/kopano-core/inetmapi/MAPISMTPTransport.cpp:223: undefined reference to `vmime::net::smtp::SMTPResponse::responseLine::getText() const'
      /usr/src/debug/kopano-core/inetmapi/MAPISMTPTransport.cpp:223:(.text+0x3302): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `vmime::net::smtp::SMTPResponse::responseLine::getText() const'
      /usr/src/debug/kopano-core/inetmapi/MAPISMTPTransport.cpp:208: undefined reference to `vmime::net::smtp::SMTPResponse::responseLine::getText() const'
      /usr/src/debug/kopano-core/inetmapi/MAPISMTPTransport.cpp:208:(.text+0x3e62): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `vmime::net::smtp::SMTPResponse::responseLine::getText() const'
      collect2: error: ld returned 1 exit status
      

      Acloser look shows: make V=1

      /bin/sh ./libtool  --tag=CXX   --mode=link g++ -Wall -Wmissing-declarations -std=gnu++17 -Wno-variadic-macros -O2 -fno-strict-aliasing -fvisibility=hidden -fvisibility-inlines-hidden -W
      no-sign-compare -ggdb -O2 -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 --param=ssp-buffer-size=4 -fdebug-prefix-map=/home/eger/kopano/kopano-core.x86_64/build=/usr/src/debug/kopano-core -fdebug-prefix-map=/home/eger/kopan
      o/kopano-core.x86_64/src/kopanocore=/usr/src/debug/kopano-core  -version-info 0:0:0 -Wl,--version-script=./default.sym -no-undefined  -o libkcinetmapi.la -rpath /usr/lib inetmapi/ECMapiUtils.lo inetmapi/ECVMIMEUtils.lo inetmapi/MAPISMTP
      Transport.lo inetmapi/MAPIToVMIME.lo inetmapi/SMIMEMessage.lo inetmapi/VMIMEToMAPI.lo inetmapi/inetmapi.lo inetmapi/inputStreamMAPIAdapter.lo inetmapi/mapiAttachment.lo inetmapi/mapiTextPart.lo inetmapi/tnef.lo libmapi.la libkcutil.la l
      ibkcicalmapi.la  -liconv -L/usr/lib64 -lvmime  -lxml2
      libtool: link: rm -fr  .libs/libkcinetmapi.dll.a
      libtool: link: g++ -shared -nostdlib /usr/lib/gcc/x86_64-pc-cygwin/7.4.0/crtbeginS.o  inetmapi/.libs/ECMapiUtils.o inetmapi/.libs/ECVMIMEUtils.o inetmapi/.libs/MAPISMTPTransport.o inetmapi/.libs/MAPIToVMIME.o inetmapi/.libs/SMIMEMessage.o inetmapi/.libs/VMIMEToMAPI.o inetmapi/.libs/inetmapi.o inetmapi/.libs/inputStreamMAPIAdapter.o inetmapi/.libs/mapiAttachment.o inetmapi/.libs/mapiTextPart.o inetmapi/.libs/tnef.o   -L/home/eger/kopano/kopano-core.x86_64/build/.libs ./.libs/libmapi.dll.a ./.libs/libkcutil.dll.a ./.libs/libkcicalmapi.dll.a /home/eger/kopano/kopano-core.x86_64/build/.libs/libkcfreebusy.dll.a /home/eger/kopano/kopano-core.x86_64/build/.libs/libmapi.dll.a /home/eger/kopano/kopano-core.x86_64/build/.libs/libkcutil.dll.a -lpthread -lcrypto -lcurl -lz -licui18n -licuuc -licudata -ljsoncpp -lHX -lssl -luuid -lintl -lical -licalss -licalvcal -liconv -L/usr/lib64 -lvmime -lxml2 -L/bin/../lib -L/usr/lib/gcc/x86_64-pc-cygwin/7.4.0 -L/usr/lib/gcc/x86_64-pc-cygwin/7.4.0/../../../../x86_64-pc-cygwin/lib/../lib -L/usr/lib/gcc/x86_64-pc-cygwin/7.4.0/../../../../lib -L/lib/../lib -L/usr/lib/../lib -L/bin -L/usr/lib/gcc/x86_64-pc-cygwin/7.4.0/../../../../x86_64-pc-cygwin/lib -L/usr/lib/gcc/x86_64-pc-cygwin/7.4.0/../../.. -lstdc++ -lgcc_s -lgcc -lcygwin -ladvapi32 -lshell32 -luser32 -lkernel32 -lgcc_s -lgcc /usr/lib/gcc/x86_64-pc-cygwin/7.4.0/crtend.o  -O2 -ggdb -O2 -Wl,--version-script=./default.sym   -o .libs/cygkcinetmapi-0.dll -Wl,--enable-auto-image-base -Xlinker --out-implib -Xlinker .libs/libkcinetmapi.dll.a
      inetmapi/.libs/MAPISMTPTransport.o: In function `vmime::net::smtp::MAPISMTPTransport::helo()':
      /usr/src/debug/kopano-core/inetmapi/MAPISMTPTransport.cpp:223: undefined reference to `vmime::net::smtp::SMTPResponse::responseLine::getText() const'
      /usr/src/debug/kopano-core/inetmapi/MAPISMTPTransport.cpp:223:(.text+0x3302): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `vmime::net::smtp::SMTPResponse::responseLine::getText() const'
      /usr/src/debug/kopano-core/inetmapi/MAPISMTPTransport.cpp:208: undefined reference to `vmime::net::smtp::SMTPResponse::responseLine::getText() const'
      /usr/src/debug/kopano-core/inetmapi/MAPISMTPTransport.cpp:208:(.text+0x3e62): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `vmime::net::smtp::SMTPResponse::responseLine::getText() const'
      

      It should be noted that Makefile.am notes the following for libkcinetmapi:

      # Add '-z now' -> -Wl,-z, -Wl,now to LD flags so that we do early binding of
      # symbols. This fixes a problem in which libvmime attempts to resolve a symbol
      # in libinetmapi.so during the unload of vmime, initiated by the unload of
      # libinetmapi. On some systems, this fails to resolve the symbol during unload,
      # resulting in a crash in __cxa_finalize during unload of mapi.so
      libkcinetmapi_la_LIBADD = \
              libmapi.la libkcutil.la libkcicalmapi.la \
              ${COND_libkcrosie_la} ${ICONV_LIBS} ${VMIME_LIBS} ${XML2_LIBS}
      libkcinetmapi_la_LDFLAGS = ${AM_LDFLAGS} \
              -version-info 0:0:0 ${default_SYFLAGS${NO_VSYM}} -no-undefined
      EXTRA_libkcinetmapi_la_DEPENDENCIES = ${default_sym}
      

      As you can see, I have modified this passage (took away Wl,-z Wl,now; not supported by Cygwin; added --no-undefined for static linking). This might be the culprit, however, this worked with all the foregoing libraries very well.

      When looking at the missing symbol: vmime::net::smtp::SMTPResponse::responseLine:getText() I tried to find it in /usr/lib64/libvmime.dll.a, but it is not there:

      objdump -x /usr/lib64/libvmime.dll.a | grep SMTPResponse
      [  5](sec  3)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 __imp__ZTVN5vmime3net4smtp12SMTPResponseE
      [  6](sec  5)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 __nm__ZTVN5vmime3net4smtp12SMTPResponseE
      [  5](sec  3)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 __imp__ZTIN5vmime3net4smtp12SMTPResponseE
      [  6](sec  5)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 __nm__ZTIN5vmime3net4smtp12SMTPResponseE
      [  5](sec  1)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 _ZNK5vmime3net4smtp12SMTPResponse9getLineAtEm
      [  6](sec  3)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 __imp__ZNK5vmime3net4smtp12SMTPResponse9getLineAtEm
      [  5](sec  1)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 _ZNK5vmime3net4smtp12SMTPResponse7getTextEv
      [  6](sec  3)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 __imp__ZNK5vmime3net4smtp12SMTPResponse7getTextEv
      [  5](sec  1)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 _ZNK5vmime3net4smtp12SMTPResponse7getCodeEv
      [  6](sec  3)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 __imp__ZNK5vmime3net4smtp12SMTPResponse7getCodeEv
      [  5](sec  1)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 _ZNK5vmime3net4smtp12SMTPResponse15getEnhancedCodeEv
      [  6](sec  3)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 __imp__ZNK5vmime3net4smtp12SMTPResponse15getEnhancedCodeEv
      [  5](sec  1)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 _ZNK5vmime3net4smtp12SMTPResponse15getCurrentStateEv
      [  6](sec  3)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 __imp__ZNK5vmime3net4smtp12SMTPResponse15getCurrentStateEv
      [  5](sec  1)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 _ZNK5vmime3net4smtp12SMTPResponse12getLineCountEv
      [  6](sec  3)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 __imp__ZNK5vmime3net4smtp12SMTPResponse12getLineCountEv
      [  5](sec  1)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 _ZNK5vmime3net4smtp12SMTPResponse11getLastLineEv
      [  6](sec  3)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 __imp__ZNK5vmime3net4smtp12SMTPResponse11getLastLineEv
      [  5](sec  1)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 _ZN5vmime3net4smtplsERSoRKNS1_12SMTPResponse18enhancedStatusCodeE
      [  6](sec  3)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 __imp__ZN5vmime3net4smtplsERSoRKNS1_12SMTPResponse18enhancedStatusCodeE
      [  5](sec  1)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 _ZN5vmime3net4smtp16SMTPCommandErrorC2ERKSsS4_iRKNS1_12SMTPResponse18enhancedStatusCodeERKNS_9exceptionE
      [  6](sec  3)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 __imp__ZN5vmime3net4smtp16SMTPCommandErrorC2ERKSsS4_iRKNS1_12SMTPResponse18enhancedStatusCodeERKNS_9exceptionE
      [  5](sec  1)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 _ZN5vmime3net4smtp16SMTPCommandErrorC2ERKSsS4_S4_iRKNS1_12SMTPResponse18enhancedStatusCodeERKNS_9exceptionE
      [  6](sec  3)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 __imp__ZN5vmime3net4smtp16SMTPCommandErrorC2ERKSsS4_S4_iRKNS1_12SMTPResponse18enhancedStatusCodeERKNS_9exceptionE
      [  5](sec  1)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 _ZN5vmime3net4smtp16SMTPCommandErrorC1ERKSsS4_iRKNS1_12SMTPResponse18enhancedStatusCodeERKNS_9exceptionE
      [  6](sec  3)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 __imp__ZN5vmime3net4smtp16SMTPCommandErrorC1ERKSsS4_iRKNS1_12SMTPResponse18enhancedStatusCodeERKNS_9exceptionE
      [  5](sec  1)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 _ZN5vmime3net4smtp16SMTPCommandErrorC1ERKSsS4_S4_iRKNS1_12SMTPResponse18enhancedStatusCodeERKNS_9exceptionE
      [  6](sec  3)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 __imp__ZN5vmime3net4smtp16SMTPCommandErrorC1ERKSsS4_S4_iRKNS1_12SMTPResponse18enhancedStatusCodeERKNS_9exceptionE
      [  5](sec  1)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 _ZN5vmime3net4smtp12SMTPResponseC2ESt10shared_ptrINS0_6tracerEES3_INS0_6socketEES3_INS0_14timeoutHandlerEERKNS2_5stateE
      [  6](sec  3)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 __imp__ZN5vmime3net4smtp12SMTPResponseC2ESt10shared_ptrINS0_6tracerEES3_INS0_6socketEES3_INS0_14timeoutHandlerEERKNS2_5stateE
      [  5](sec  1)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 _ZN5vmime3net4smtp12SMTPResponseC2ERKS2_
      [  6](sec  3)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 __imp__ZN5vmime3net4smtp12SMTPResponseC2ERKS2_
      [  5](sec  1)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 _ZN5vmime3net4smtp12SMTPResponseC1ESt10shared_ptrINS0_6tracerEES3_INS0_6socketEES3_INS0_14timeoutHandlerEERKNS2_5stateE
      [  6](sec  3)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 __imp__ZN5vmime3net4smtp12SMTPResponseC1ESt10shared_ptrINS0_6tracerEES3_INS0_6socketEES3_INS0_14timeoutHandlerEERKNS2_5stateE
      [  5](sec  1)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 _ZN5vmime3net4smtp12SMTPResponseC1ERKS2_
      [  6](sec  3)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 __imp__ZN5vmime3net4smtp12SMTPResponseC1ERKS2_
      [  5](sec  1)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 _ZN5vmime3net4smtp12SMTPResponse19extractResponseCodeERKSs
      [  6](sec  3)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 __imp__ZN5vmime3net4smtp12SMTPResponse19extractResponseCodeERKSs
      [  5](sec  1)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 _ZN5vmime3net4smtp12SMTPResponse19extractEnhancedCodeERKSs
      [  6](sec  3)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 __imp__ZN5vmime3net4smtp12SMTPResponse19extractEnhancedCodeERKSs
      [  5](sec  1)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 _ZN5vmime3net4smtp12SMTPResponse16readResponseLineEv
      [  6](sec  3)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 __imp__ZN5vmime3net4smtp12SMTPResponse16readResponseLineEv
      [  5](sec  1)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 _ZN5vmime3net4smtp12SMTPResponse15getNextResponseEv
      [  6](sec  3)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 __imp__ZN5vmime3net4smtp12SMTPResponse15getNextResponseEv
      [  5](sec  1)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 _ZN5vmime3net4smtp12SMTPResponse12readResponseEv
      [  6](sec  3)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 __imp__ZN5vmime3net4smtp12SMTPResponse12readResponseEv
      [  5](sec  1)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 _ZN5vmime3net4smtp12SMTPResponse12readResponseESt10shared_ptrINS0_6tracerEES3_INS0_6socketEES3_INS0_14timeoutHandlerEERKNS2_5stateE
      [  6](sec  3)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 __imp__ZN5vmime3net4smtp12SMTPResponse12readResponseESt10shared_ptrINS0_6tracerEES3_INS0_6socketEES3_INS0_14timeoutHandlerEERKNS2_5stateE
      

      In the static library it is there:

      objdump -x /usr/lib64/libvmime.a | grep responseLine | grep getText
      [551](sec  0)(fl 0x00)(ty  20)(scl   2) (nx 0) 0x0000000000000000 _ZNK5vmime3net4smtp12SMTPResponse12responseLine7getTextEv
      0000000000003cb0 R_X86_64_PC32     _ZNK5vmime3net4smtp12SMTPResponse12responseLine7getTextEv
      0000000000004b3b R_X86_64_PC32     _ZNK5vmime3net4smtp12SMTPResponse12responseLine7getTextEv
      [ 65](sec  1)(fl 0x00)(ty  20)(scl   2) (nx 0) 0x0000000000000f70 _ZNK5vmime3net4smtp12SMTPResponse12responseLine7getTextEv
      

      However, linking to the static library does not lead to success.

      Can anybody help me why this symbol is missing from the dll library?

      marlemion 1 Reply Last reply Reply Quote 0
      • marlemion
        marlemion @marlemion last edited by

        A little patch can help:

        --- src/vmime/net/smtp/SMTPResponse.hpp 2019-06-28 08:43:39.835498700 +0200
        +++ src/vmime/net/smtp/SMTPResponse.hpp 2019-06-28 08:43:52.770477200 +0200
        @@ -71,7 +71,7 @@
                };
        
                /** An element of a SMTP response. */
        -       class responseLine
        +       class VMIME_EXPORT responseLine
                {
                public:
        
        
        1 Reply Last reply Reply Quote 0
        • jengelh
          jengelh Banned last edited by

          forwarded to https://github.com/kisli/vmime/issues/220

          1 Reply Last reply Reply Quote 0
          • First post
            Last post