Bug #91735 Fix library dependencies when building on Solaris
Submitted: 20 Jul 2018 11:28 Modified: 20 Jul 2018 21:28
Reporter: Tor Didriksen Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: Compiling Severity:S3 (Non-critical)
Version:8.0.13 OS:Any
Assigned to: CPU Architecture:Any

[20 Jul 2018 11:28] Tor Didriksen
Description:
Working on the patch for
Bug #28226651 ARM64: SWITCH TO ARMTOOLSET-1 ON OL7
revealed several missing dependencies when building with a non-default compiler.
Similar issues applies to the Solaris/SunStudio build.

Before patch:
$ldd plugin_output_directory/rewriter.so 
        libgcc_s.so.1 =>         /opt/developerstudio12.5/lib/compilers/CC-gcc/lib/sparcv9/libgcc_s.so.1
        libstatomic.so.1 =>      /opt/developerstudio12.5/lib/compilers/atomic/sparcv9/libstatomic.so.1
        libc.so.1 =>     /lib/64/libc.so.1

With patch:
$ldd plugin_output_directory/rewriter.so 
        libstdc++.so.6 =>        /opt/developerstudio12.5/lib/compilers/CC-gcc/lib/sparcv9/libstdc++.so.6
        libgcc_s.so.1 =>         /opt/developerstudio12.5/lib/compilers/CC-gcc/lib/sparcv9/libgcc_s.so.1
        libCrunG3.so.1 =>        /usr/lib/64/libCrunG3.so.1
        libc.so.1 =>     /lib/64/libc.so.1
        libstatomic.so.1 =>      /opt/developerstudio12.5/lib/compilers/atomic/sparcv9/libstatomic.so.1
        libm.so.2 =>     /lib/64/libm.so.2
        librt.so.1 =>    /lib/64/librt.so.1

Similar issues are found for plugins and components.

How to repeat:
Build on Solaris.

Suggested fix:
Maintain explicit library dependencies for

CMAKE_C_LINK_FLAGS         
CMAKE_CXX_LINK_FLAGS       
CMAKE_MODULE_LINKER_FLAGS  
CMAKE_SHARED_LINKER_FLAGS  
QUOTED_CMAKE_CXX_LINK_FLAGS
[20 Jul 2018 21:28] Paul DuBois
Posted by developer:
 
Fixed in 8.0.13.

Internal issue. No changelog entry needed.
[10 Dec 2018 10:48] Klaus Hicke
Still not fixed in 8.0.13 CE:

-bash-4.4$ md5sum mysqld
4c701144b176155bee5eea11883af691  mysqld

-bash-4.4$ ./mysqld --version
ld.so.1: mysqld: fatal: libstatomic.so.1: open failed: No such file or directory
Killed

bash-4.4$ ldd mysqld
...
        libstatomic.so.1 =>      (file not found)
...
[11 Dec 2018 12:14] Tor Didriksen
Posted by developer:
 
did you actually install the compiler runtime libraries?
https://docs.oracle.com/cd/E60778_01/html/E60743/gozsu.html
Note that we currently use Developer Studio 12.6

$ldd bin/mysqld
        libstdc++.so.6 =>        /opt/developerstudio12.6/lib/compilers/CC-gcc/lib/sparcv9/libstdc++.so.6
        libgcc_s.so.1 =>         /opt/developerstudio12.6/lib/compilers/CC-gcc/lib/sparcv9/libgcc_s.so.1
        libCrunG3.so.1 =>        /usr/lib/64/libCrunG3.so.1
        libc.so.1 =>     /usr/lib/64/libc.so.1
        libmtmalloc.so.1 =>      /usr/lib/64/libmtmalloc.so.1
        libssl.so.1.0.0 =>       /usr/lib/64/libssl.so.1.0.0
        libcrypto.so.1.0.0 =>    /usr/lib/64/libcrypto.so.1.0.0
        libm.so.2 =>     /usr/lib/64/libm.so.2
        libstatomic.so.1 =>      /opt/developerstudio12.6/lib/compilers/atomic/sparcv9/libstatomic.so.1
        librt.so.1 =>    /usr/lib/64/librt.so.1
[12 Dec 2018 7:09] Klaus Hicke
That's what curently is installed:

~# pkg info studio-runtime
             Name: system/library/studio-runtime
          Summary: Runtime Support For Oracle Solaris Studio
      Description: Runtime support libraries for applications built using Oracle
                   Solaris Studio
         Category: Development/C (org.opensolaris.category.2008) Development/C++
                   (org.opensolaris.category.2008) Development/Fortran
                   (org.opensolaris.category.2008) Meta Packages/Group Packages
                   (org.opensolaris.category.2008)
            State: Installed
        Publisher: solaris
          Version: 11.4
           Branch: 11.4.0.0.1.4.0
   Packaging Date:  9. April 2018 um 19:37:18 Uhr
Last Install Time: 10. Dezember 2018 um 10:26:13 Uhr
             Size: 2.63 kB
             FMRI: pkg://solaris/system/library/studio-runtime@11.4-11.4.0.0.1.4.0:20180409T193718Z

Because that's the ony thing available on "standard" Solaris installation without having set a publisher for solaris studio.
I hoped that it is not necessary to have more parts of studio installed...

So will the dependency be removed to avoid this, or shoud I just follow the instructions and install the missing deps?
[12 Dec 2018 9:02] Tor Didriksen
Posted by developer:
 
you need to install the missing runtime libraries
[12 Dec 2018 9:29] Klaus Hicke
Ok. Then I will install the missing packages.
I think my questions are all answered now.

THX for your help!
[1 Mar 2019 10:28] Klaus Hicke
The bug is still existing (or reinvented) in 8.0.15:

# pkg list developer/developerstudio-125/\*
NAME (PUBLISHER)                                  VERSION                    IFO
developer/developerstudio-125/library/c++-libs (solarisstudio) 12.5-1.0.0.0               i--
developer/developerstudio-125/library/c-libs (solarisstudio) 12.5-1.0.0.0               i--
developer/developerstudio-125/library/f90-libs (solarisstudio) 12.5-1.0.0.0               i--
developer/developerstudio-125/library/math-libs (solarisstudio) 12.5-1.0.0.0               i--
developer/developerstudio-125/library/perflib (solarisstudio) 12.5-1.0.0.0               i--
developer/developerstudio-125/library/studio-gccrt (solarisstudio) 12.5-1.0.0.0               i--
developer/developerstudio-125/studio-common (solarisstudio) 12.5-1.0.0.0               i--
developer/developerstudio-125/studio-ja (solarisstudio) 12.5-1.0.0.0               i--
developer/developerstudio-125/studio-legal (solarisstudio) 12.5-1.0.0.0               i--
developer/developerstudio-125/studio-zhCN (solarisstudio) 12.5-1.0.0.0               i--

# ldd /u05/app/mysql/bin/mysqld
        libstdc++.so.6 =>        /usr/lib/64/libstdc++.so.6
        libgcc_s.so.1 =>         /usr/lib/64/libgcc_s.so.1
        libCrunG3.so.1 =>        /usr/lib/64/libCrunG3.so.1
        libc.so.1 =>     /lib/64/libc.so.1
        libmtmalloc.so.1 =>      /usr/lib/64/libmtmalloc.so.1
        libssl.so.1.0.0 =>       /lib/64/libssl.so.1.0.0
        libcrypto.so.1.0.0 =>    /lib/64/libcrypto.so.1.0.0
        libsocket.so.1 =>        /lib/64/libsocket.so.1
        libnsl.so.1 =>   /lib/64/libnsl.so.1
        libm.so.2 =>     /lib/64/libm.so.2
        libstatomic.so.1 =>      (file not found) # <- still denpending on libstatomic instead of libatomic
        librt.so.1 =>    /lib/64/librt.so.1

PS: we know, that we're still on DevStudio 12.5 runtime ...
[1 Mar 2019 11:18] Tor Didriksen
Posted by developer:
 
for 8.0.15 mysqld was built like this:

/opt/developerstudio12.6/bin/CC -std=c++11 -xbuiltin=%all -xlibmil -xatomic=studio -errtags -KPIC -erroff=anonnotype,wvarhidemem,anonstruct,wlessrestrictedthrow,oklambdaretmulti,unassigned -m64 -DDBUG_OFF -g -xO2 -DNDEBUG -xdebuginfo=no%decl -L/opt/developerstudio12.6/lib/compilers/CC-gcc/lib/sparcv9 -R/opt/developerstudio12.6/lib/compilers/CC-gcc/lib/sparcv9 -lstdc++ -lgcc_s -lCrunG3 -lc -L/opt/developerstudio12.6/lib/compilers/atomic/sparcv9 -R/opt/developerstudio12.6/lib/compilers/atomic/sparcv9 -lmtmalloc CMakeFiles/mysqld.dir/main.cc.o -o ../runtime_output_directory/mysqld -L/opt/developerstudio12.6/lib/compilers/staticlib/sparcv9 ../archive_output_directory/libsql_main.a ../archive_output_directory/libsql_gis.a ../archive_output_directory/libbinlog.a ../archive_output_directory/librpl.a ../archive_output_directory/libmaster.a ../archive_output_directory/libslave.a ../archive_output_directory/libsql_main.a ../archive_output_directory/libsql_dd.a ../archive_output_directory/libsql_gis.a ../archive_output_directory/libmysys.a ../archive_output_directory/libmysys_ssl.a ../libbinlogevents/lib/libbinlogevents.a ../extra/icu/source/i18n/libicui18n.a ../extra/icu/source/common/libicuuc.a ../extra/icu/source/stubdata/libicustubdata.a ../archive_output_directory/libmyisammrg.a ../archive_output_directory/libblackhole.a ../archive_output_directory/libheap.a ../archive_output_directory/libinnobase.a ../archive_output_directory/liblz4_lib.a ../archive_output_directory/libperfschema.a ../archive_output_directory/libfederated.a ../archive_output_directory/libmyisam.a ../archive_output_directory/libmyisam_sys.a ../archive_output_directory/libcsv.a ../archive_output_directory/libarchive.a ../archive_output_directory/libtemptable.a ../archive_output_directory/libngram_parser.a ../archive_output_directory/libmysqlx.a ../extra/icu/source/i18n/libicui18n.a ../extra/icu/source/common/libicuuc.a ../extra/icu/source/stubdata/libicustubdata.a ../archive_output_directory/libmysqlxmessages_lite.a ../extra/protobuf/protobuf-3.6.1/cmake/libprotobuf-lite.a ../extra/libevent/lib/libevent.a ../components/mysql_server/component_mysql_server.a ../archive_output_directory/libvio.a -lssl -lcrypto -lsocket ../archive_output_directory/libmysys.a ../archive_output_directory/libdbug.a ../archive_output_directory/libmysys.a ../archive_output_directory/libdbug.a ../archive_output_directory/libz.a ../archive_output_directory/libstrings.a -lnsl -lm
[1 Mar 2019 11:20] Tor Didriksen
Posted by developer:
 
I downloaded the 8.0.15 tarball, unpacked it, and notice the RPATH below, you need to install the appropriate runtime libraries.

elfdump -devl mysql-8.0.15-solaris11-sparc-64bit/bin/mysqld

ELF Header
  ei_magic:   { 0x7f, E, L, F }
  ei_class:   ELFCLASS64          ei_data:       ELFDATA2MSB
  ei_osabi:   ELFOSABI_SOLARIS    ei_abiversion: EAV_SUNW_CURRENT
  e_machine:  EM_SPARCV9          e_version:     EV_CURRENT
  e_type:     ET_EXEC
  e_flags:    [ EF_SPARCV9_TSO EF_SPARC_SUN_US1 EF_SPARC_SUN_US3 ]
  e_entry:           0x1035c4aa0  e_ehsize:     64  e_shstrndx:  38
  e_shoff:            0x29f0a6a0  e_shentsize:  64  e_shnum:     42
  e_phoff:                  0x40  e_phentsize:  56  e_phnum:     8
mysql-8.0.15-solaris11-sparc-64bit/bin/mysqld: .exception_ranges: sh_link: 65280: does not point to a valid section

Version Needed Section:  .SUNW_version
  index  file              version        
    [2]  libstdc++.so.6    GLIBCXX_3.4      [ INFO ]
    [3]                    GLIBCXX_3.4.5    [ INFO ]
    [4]                    GLIBCXX_3.4.9    [ INFO ]
    [5]                    GLIBCXX_3.4.11   [ INFO ]
    [6]                    GLIBCXX_3.4.13   [ INFO ]
    [7]                    GLIBCXX_3.4.14   [ INFO ]
    [8]                    GLIBCXX_3.4.15   [ INFO ]
    [9]                    GLIBCXX_3.4.16   [ INFO ]
   [10]                    GLIBCXX_3.4.17   [ INFO ]
   [11]                    GLIBCXX_3.4.18   [ INFO ]
   [12]                    GLIBCXX_3.4.19   [ INFO ]
   [13]                    GLIBCXX_3.4.20   [ INFO ]
   [14]                    GLIBCXX_3.4.21
   [15]                    CXXABI_1.3       [ INFO ]
   [16]                    CXXABI_1.3.1     [ INFO ]
   [17]                    CXXABI_1.3.5     [ INFO ]
   [18]                    CXXABI_1.3.7
   [19]  libgcc_s.so.1     GCC_3.0          [ INFO ]
   [20]                    GCC_4.2.0
   [21]  libCrunG3.so.1    SUNW_1.1
   [22]  libc.so.1         SUNWpublic
   [23]                    SUNW_1.23        [ INFO ]
   [24]                    SUNW_1.22.7      [ INFO ]
   [25]                    SUNW_1.22.5      [ INFO ]
   [26]                    SUNW_1.22        [ INFO ]
   [27]                    SUNW_1.21.2      [ INFO ]
   [28]                    SUNW_1.21        [ INFO ]
   [29]                    SUNW_1.19        [ INFO ]
   [30]                    SUNW_1.18        [ INFO ]
   [31]                    SUNW_1.1         [ INFO ]
   [32]                    SUNW_0.9         [ INFO ]
   [33]                    SUNW_0.7         [ INFO ]
   [34]  libsocket.so.1    SUNW_1.7
   [35]                    SUNW_1.4         [ INFO ]
   [36]                    SUNW_0.7         [ INFO ]
   [37]  libnsl.so.1       SUNW_1.7
   [38]  libm.so.2         SUNW_1.2
   [39]                    SUNW_1.1.1       [ INFO ]
   [40]                    SUNW_1.1         [ INFO ]
   [41]  libstatomic.so.1  SUNWprivate_1.0

Dynamic Section:  .dynamic
    index  tag             value      
      [0]  NEEDED          0x151fa1b    libstdc++.so.6
      [1]  NEEDED          0x151fb1a    libgcc_s.so.1
      [2]  NEEDED          0x151fb3a    libCrunG3.so.1
      [3]  NEEDED          0x151fb52    libc.so.1
      [4]  NEEDED          0x151fc3b    libmtmalloc.so.1
      [5]  NEEDED          0x151fc4c    libssl.so.1.0.0
      [6]  NEEDED          0x151fc5c    libcrypto.so.1.0.0
      [7]  NEEDED          0x151fbcf    libsocket.so.1
      [8]  NEEDED          0x151fbf0    libnsl.so.1
      [9]  NEEDED          0x151fbfc    libm.so.2
     [10]  NEEDED          0x151fc1a    libstatomic.so.1
     [11]  NEEDED          0x151fc6f    librt.so.1
     [12]  INIT            0x1055b7610  
     [13]  FINI            0x1055b8988  
     [14]  RUNPATH         0x151fc7a    /opt/developerstudio12.6/lib/compilers/CC-gcc/lib/sparcv9:/opt/developerstudio12.6/lib/compilers/atomic/sparcv9:/opt/developerstudio12.6/lib/sparcv9:/opt/developerstudio12.6/lib/compilers/CC-gcc/lib/sparcv9:/opt/developerstudio12.6/lib/compilers/atomic/sparcv9
     [15]  RPATH           0x151fc7a    /opt/developerstudio12.6/lib/compilers/CC-gcc/lib/sparcv9:/opt/developerstudio12.6/lib/compilers/atomic/sparcv9:/opt/developerstudio12.6/lib/sparcv9:/opt/developerstudio12.6/lib/compilers/CC-gcc/lib/sparcv9:/opt/developerstudio12.6/lib/compilers/atomic/sparcv9
     [16]  HASH            0x10009d990  
     [17]  STRTAB          0x1007e23b0  
     [18]  STRSZ           0x151ff7f    
     [19]  SYMTAB          0x1002df700  
     [20]  SYMENT          0x18         
     [21]  SUNW_SYMTAB     0x100249358  
     [22]  SUNW_SYMSZ      0x599058     
     [23]  SUNW_SORTENT    0x4          
     [24]  SUNW_SYMSORT    0x101d6d498  
     [25]  SUNW_SYMSORTSZ  0xecaec      
     [26]  SUNW_TLSSORT    0x101e59f88  
     [27]  SUNW_TLSSORTSZ  0x5c         
     [28]  CHECKSUM        0x4156       
     [29]  VERNEED         0x101d02330  
     [30]  VERNEEDNUM      0x8          
     [31]  PLTRELSZ        0x48c0       
     [32]  PLTREL          0x7          
     [33]  JMPREL          0x101e82f98  
     [34]  RELA            0x101e59fe8  
     [35]  RELASZ          0x2d870      
     [36]  RELAENT         0x18         
     [37]  REGISTER        0xfc40       
     [38]  REGISTER        0xfc52       
     [39]  DEBUG           0            
     [40]  SUNW_CAP        0x100000220  
     [41]  FLAGS           0x10         [ STATIC_TLS ]
     [42]  FLAGS_1         0            0
     [43]  SUNW_STRPAD     0x200        
     [44]  SUNW_LDMACH     0x2b         EM_SPARCV9
     [45]  PLTGOT          0x1056b8c00  
  [46-56]  NULL            0            
mysql-8.0.15-solaris11-sparc-64bit/bin/mysqld: phdr[5]: PT_DYNAMIC size does not match referenced section: p_memsz=0: shdr[22: .dynamic].sh_size=0x390
[5 Mar 2019 15:08] Klaus Hicke
Just installed Studio12.6, too. So two runtimes installed (12.5 and 12.6) and the machine can run 5.7 und 8.0...