MantisBT

View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0001451Orfeo Toolbox (OTB)Generalpublic2017-09-21 10:352017-10-17 11:22
Reporterpoughov 
Assigned Togpasero 
PrioritynormalSeverityminorReproducibilityhave not tried
StatusresolvedResolutionfixed 
PlatformOSOS Version
Summary0001451: OTB-6.2.0-Linux64 package missing libstdc++
DescriptionOn my CentOS 7 machine, nightly standalone package from today does not work because of missing lib versions:

poughov@to-2216251 ~/Téléchargements ./OTB-6.2.0-Linux64/bin/otbcli_Rescale
./OTB-6.2.0-Linux64/bin/otbApplicationLauncherCommandLine: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by ./OTB-6.2.0-Linux64/bin/otbApplicationLauncherCommandLine)
./OTB-6.2.0-Linux64/bin/otbApplicationLauncherCommandLine: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libOTBCommandLine-6.2.so.1)
./OTB-6.2.0-Linux64/bin/otbApplicationLauncherCommandLine: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libtinyxml.so)
./OTB-6.2.0-Linux64/bin/otbApplicationLauncherCommandLine: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libITKCommon-4.12.so.1)
./OTB-6.2.0-Linux64/bin/otbApplicationLauncherCommandLine: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libitksys-4.12.so.1)
./OTB-6.2.0-Linux64/bin/otbApplicationLauncherCommandLine: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libitksys-4.12.so.1)
./OTB-6.2.0-Linux64/bin/otbApplicationLauncherCommandLine: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libOTBApplicationEngine-6.2.so.1)
./OTB-6.2.0-Linux64/bin/otbApplicationLauncherCommandLine: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libOTBApplicationEngine-6.2.so.1)
./OTB-6.2.0-Linux64/bin/otbApplicationLauncherCommandLine: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libOTBCommon-6.2.so.1)
./OTB-6.2.0-Linux64/bin/otbApplicationLauncherCommandLine: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libitkvnl-4.12.so.1)
./OTB-6.2.0-Linux64/bin/otbApplicationLauncherCommandLine: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libOTBIOGDAL-6.2.so.1)
./OTB-6.2.0-Linux64/bin/otbApplicationLauncherCommandLine: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libitkvnl_algo-4.12.so.1)
./OTB-6.2.0-Linux64/bin/otbApplicationLauncherCommandLine: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libgdal.so.20)
./OTB-6.2.0-Linux64/bin/otbApplicationLauncherCommandLine: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libgdal.so.20)
./OTB-6.2.0-Linux64/bin/otbApplicationLauncherCommandLine: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libotbossimplugins-6.2.so.1)
./OTB-6.2.0-Linux64/bin/otbApplicationLauncherCommandLine: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libotbossimplugins-6.2.so.1)
./OTB-6.2.0-Linux64/bin/otbApplicationLauncherCommandLine: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libossim.so.1)
./OTB-6.2.0-Linux64/bin/otbApplicationLauncherCommandLine: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libgeos.so.3.6.1)
TagsNo tags attached.
Attached Files

- Relationships

-  Notes
(0004314)
rashadkm (developer)
2017-09-21 13:43

we cannot add libstdc++ into package easily now.
An alternative fix must be found.
(0004315)
gpasero (administrator)
2017-09-22 09:44

What alternative solution do you see ?
My guess is that deploying libstdc++ is our best option. I will investigate this.

I have reproduced a similar issue when installing the package on Ubuntu Precise. In this case both libstdc++ and libc on the system are too old.
(0004316)
grizonnetm (administrator)
2017-09-22 12:52

Can we discuss the option to choose to document that the standalone binary package on Linux in only available for libstdc++ and libc versions superior to XXX?

Do we really want to package these dependencies?

Do we have other latest release distribs not supported appart from CenOS 7?

There will be perhaps a CentOS 8 in few months (centOS 7 was released in 2014) with newer versions of libc...
(0004317)
poughov (administrator)
2017-09-22 14:27

I agree with Manuel, that option should at least be discussed. My CentOS is ancient...

How do other toolkits handle this issue? AppImage (https://appimage.org/ [^]) for example? Or 0install (http://0install.net [^])?
(0004318)
gpasero (administrator)
2017-09-22 14:31

Sure, we can document that binary package requires a minimal version for libc and libstdc++.

I was still hoping to find a backup plan for "not-so-old" distro.
(0004320)
rashadkm (developer)
2017-09-22 15:34

okay. first thing to make sure is if the installation is not erred!. that means check if the script that add/set RPATH is working. (try objdump -p /path/to/someotbexe |grep NEEDED

If that is wrong, this is a non-issue.

the problem about adding libstdc++ comes when building "other otbstuff" using this package. for binary only, maybe libstdc++ might work (depends on luck + ABI stability)

but when you link your code with OTB libs (expecting SOME stdc++ ABI) and remote module or example code using system stdc++ ABI. it can get messed up.

restricting a particular platform could be done in otbenv.profile (packaged version)
(0004321)
rashadkm (developer)
2017-09-22 15:40

@poughov,

AppImage uses an older system. But we can't use centos5 easily.
https://github.com/AppImage/AppImageKit/wiki/Creating-AppImages#binaries-compiled-on-old-enough-base-system [^]


don't know about 0install. never heard about it before :)

one question,
does your compiler version is supported by OTB ? what the gcc version?
and is it using gcc or clang? . I had to ask because some distro change default to clang.
(0004322)
poughov (administrator)
2017-09-22 15:50

poughov@to-2216251 ~/Téléchargements/OTB-6.2.0-Linux64 gcc --version
gcc (GCC) 6.2.1 20160916 (Red Hat 6.2.1-3)
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

poughov@to-2216251 ~/Téléchargements/OTB-6.2.0-Linux64 ./monteverdi.sh
/home/poughov/Téléchargements/OTB-6.2.0-Linux64/bin/monteverdi: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libOTBMonteverdiGUI-6.2.so.1)
/home/poughov/Téléchargements/OTB-6.2.0-Linux64/bin/monteverdi: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libOTBMonteverdiGUI-6.2.so.1)
/home/poughov/Téléchargements/OTB-6.2.0-Linux64/bin/monteverdi: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libOTBMonteverdiCore-6.2.so.1)
/home/poughov/Téléchargements/OTB-6.2.0-Linux64/bin/monteverdi: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libOTBMonteverdiCore-6.2.so.1)
/home/poughov/Téléchargements/OTB-6.2.0-Linux64/bin/monteverdi: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libitksys-4.12.so.1)
/home/poughov/Téléchargements/OTB-6.2.0-Linux64/bin/monteverdi: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libitksys-4.12.so.1)
/home/poughov/Téléchargements/OTB-6.2.0-Linux64/bin/monteverdi: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libOTBApplicationEngine-6.2.so.1)
/home/poughov/Téléchargements/OTB-6.2.0-Linux64/bin/monteverdi: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libOTBApplicationEngine-6.2.so.1)
/home/poughov/Téléchargements/OTB-6.2.0-Linux64/bin/monteverdi: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libITKCommon-4.12.so.1)
/home/poughov/Téléchargements/OTB-6.2.0-Linux64/bin/monteverdi: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libOTBIce-6.2.so.1)
/home/poughov/Téléchargements/OTB-6.2.0-Linux64/bin/monteverdi: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libOTBIce-6.2.so.1)
/home/poughov/Téléchargements/OTB-6.2.0-Linux64/bin/monteverdi: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libOTBIOGDAL-6.2.so.1)
/home/poughov/Téléchargements/OTB-6.2.0-Linux64/bin/monteverdi: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libitkvnl-4.12.so.1)
/home/poughov/Téléchargements/OTB-6.2.0-Linux64/bin/monteverdi: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libOTBCommon-6.2.so.1)
/home/poughov/Téléchargements/OTB-6.2.0-Linux64/bin/monteverdi: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libitkvnl_algo-4.12.so.1)
/home/poughov/Téléchargements/OTB-6.2.0-Linux64/bin/monteverdi: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libgdal.so.20)
/home/poughov/Téléchargements/OTB-6.2.0-Linux64/bin/monteverdi: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libgdal.so.20)
/home/poughov/Téléchargements/OTB-6.2.0-Linux64/bin/monteverdi: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libtinyxml.so)
/home/poughov/Téléchargements/OTB-6.2.0-Linux64/bin/monteverdi: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libossim.so.1)
/home/poughov/Téléchargements/OTB-6.2.0-Linux64/bin/monteverdi: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libotbossimplugins-6.2.so.1)
/home/poughov/Téléchargements/OTB-6.2.0-Linux64/bin/monteverdi: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libotbossimplugins-6.2.so.1)
/home/poughov/Téléchargements/OTB-6.2.0-Linux64/bin/monteverdi: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /home/poughov/Téléchargements/OTB-6.2.0-Linux64/lib/libgeos.so.3.6.1)
poughov@to-2216251 ~/Téléchargements/OTB-6.2.0-Linux64
(0004323)
poughov (administrator)
2017-09-22 15:51

poughov@to-2216251 ~/Téléchargements/OTB-6.2.0-Linux64 objdump -p ./bin/otbApplicationLauncherCommandLine | grep NEEDED
  NEEDED libOTBCommandLine-6.2.so.1
  NEEDED libtinyxml.so
  NEEDED libITKCommon-4.12.so.1
  NEEDED libitksys-4.12.so.1
  NEEDED libstdc++.so.6
  NEEDED libgcc_s.so.1
  NEEDED libc.so.6
(0004324)
gpasero (administrator)
2017-09-22 15:54

After some test, the solution to add libstdc++ doesn't work : it actually provides the "GLIBCXX_3.4.20", but the library itself needs "GLIBC_2.18", which is not supplied (on CentOS7 : glibc 2.17). And adding libc.so.6 into the package doesn't work because of dynamic loading errors :

> bin/otbApplicationLauncherCommandLine
Inconsistency detected by ld.so: dl-close.c: 759: _dl_close: Assertion `map->l_init_called' failed!

At least I tried ...

Agree with Rashad on potential issues when compiling "other otbstuff", but the first priority is to allow the delivered runtimes to actually run.
(0004325)
gpasero (administrator)
2017-09-22 16:09

@poughov : I do have a GCC 6, but the official libc and libstdc++ on your system must be older. Could you check the different GCC versions on your system and also the different libstdc++ available ?
(0004326)
poughov (administrator)
2017-09-22 16:29

sure! but how :) ?
(0004327)
rashadkm (developer)
2017-09-22 17:08
edited on: 2017-09-22 17:09

@poughov,

i guess you have two libstdc++ in your system? is that correct ?

|edit|
check which gcc is linked to which stdc++ ?
try the above objdump on gcc executable ?

(0004328)
rashadkm (developer)
2017-09-22 17:11

if you can find the other libtdc++ location, we can work out something to fix centos7 including other users with custom gcc version
(0004329)
gpasero (administrator)
2017-09-22 17:19

something like : locate libstdc++
(0004331)
gpasero (administrator)
2017-09-22 18:18

Maybe you have this file :
/opt/rh/devtoolset-6/root/usr/lib/gcc/x86_64-redhat-linux/6.3.1/libstdc++.so

This is actually a ld script pointing to a static version of libstdc++. What happens if you add a symlink :
~/Téléchargements/OTB-6.2.0-Linux64/lib/libstdc++.so.6 -> /opt/rh/devtoolset-6/root/usr/lib/gcc/x86_64-redhat-linux/6.3.1/libstdc++.so
(0004334)
gpasero (administrator)
2017-09-25 16:59

I have checked 0install : haven't seen anything to make binaries more portable regarding the libc version issue.

However, on AppImage, they have a tool that might be useful :
https://github.com/AppImage/AppImageKit/tree/master/LibcWrapGenerator [^]

This tools generates a wrapper header libcwrap.h depending on the system libc version and the chosen compatibility version. If this header is included when compiling the whole application stack, the binaries will only require libc at chosen compatibility version. If we manage to build libstdc++ and the whole superbuild with this trick, we could have highly portable binaries.
(0004335)
gpasero (administrator)
2017-09-25 17:16

Found an other trick :
1) Install OTB as usual
2) Add in the lib folder the following binaries from hulk :
  * libstdc++.so.6
  * libgcc_s.so.1
  * libm.so.6
  * libc.so.6
  * libdl.so.2
  * librt.so.0
  * libpthreads.so.0
  * ld-linux-x86-64.so.2
3) Use patchelf to set the ld interpreter to the supplied ld-linux-x86-64.so.2, this should be done on the executables (monteverdi, mapla, otbApplicationLauncher*) and also on libraries the have an INTERP section (can be run on all libraries anyway).

If needed, this can be automated in the deployment of Linux package. However, this trick will NOT allow to use Python bindings, and of course SDK development is out of question without a proper toolchain.
(0004338)
gpasero (administrator)
2017-09-28 19:24

I ran a small experiment :
- take a centos7 vm
- install GCC 6 (from devtoolset-6 software collection)
- write a small CMake project with a shared library. This library contains only one function using 'std::string_literals'
- Compile it with -std=c++14

The resulting .so file links to libstdc++.so.6 from the system but only requires GLIBCXX_3.4.9 (which is totally compatible with the system /lib64/libstdc++.so.6).

The file /opt/rh/devtoolset-6/root/usr/lib/gcc/x86_64-redhat-linux/6.3.1/libstdc++.so is not actually a binary file, but a text file :
  /* GNU ld script
     Use the shared library, but some functions are only in
     the static library, so try that secondarily. */
  OUTPUT_FORMAT(elf64-x86-64)
  INPUT ( /usr/lib64/libstdc++.so.6 -lstdc++_nonshared )

If I understand right : the linker will look in the system libstdc++ first, and when specific symbols from c++14 are not found, it uses the static version of libstdc++ that is supplied with the toolchain :
/opt/rh/devtoolset-6/root/usr/lib/gcc/x86_64-redhat-linux/6.3.1/libstdc++_nonshared.a

Conclusion:
* building linux packages on a CentOS6+devtoolset-6 could be a nice solution for compatibility
* the alternative solution right now is to embed all libc family

Any thoughts?
(0004366)
gpasero (administrator)
2017-10-11 10:27

The following package has been generated on a CentOS6 VM :
https://www.orfeo-toolbox.org/packages/nightly/latest/OTB-6.2.0-Linux64.run [^]

I have tried to install it on an old Ubuntu Precise : it works !!! No compatibility issue with GLIBC or GLIBCXX.

The previous package that was built on hulk with gcc4.9 is now renamed : OTB-6.2.0-Linux64-gcc4.9.run

The dashboard submission is still missing but it should come tomorrow (minor proxy issue).
(0004370)
grizonnetm (administrator)
2017-10-12 09:25

@poughov : can you test on CentOS 7 ?
(0004374)
gpasero (administrator)
2017-10-13 15:22

I have checked on a CentOS 7 VM, new packages work fine.
(0004391)
poughov (administrator)
2017-10-17 11:22

yes, works fine for me also

- Issue History
Date Modified Username Field Change
2017-09-21 10:35 poughov New Issue
2017-09-21 13:43 rashadkm Note Added: 0004314
2017-09-22 09:39 gpasero Assigned To => gpasero
2017-09-22 09:39 gpasero Status new => assigned
2017-09-22 09:44 gpasero Note Added: 0004315
2017-09-22 12:52 grizonnetm Note Added: 0004316
2017-09-22 14:27 poughov Note Added: 0004317
2017-09-22 14:31 gpasero Note Added: 0004318
2017-09-22 15:34 rashadkm Note Added: 0004320
2017-09-22 15:40 rashadkm Note Added: 0004321
2017-09-22 15:50 poughov Note Added: 0004322
2017-09-22 15:51 poughov Note Added: 0004323
2017-09-22 15:54 gpasero Note Added: 0004324
2017-09-22 16:09 gpasero Note Added: 0004325
2017-09-22 16:29 poughov Note Added: 0004326
2017-09-22 17:08 rashadkm Note Added: 0004327
2017-09-22 17:09 rashadkm Note Edited: 0004327 View Revisions
2017-09-22 17:11 rashadkm Note Added: 0004328
2017-09-22 17:19 gpasero Note Added: 0004329
2017-09-22 18:18 gpasero Note Added: 0004331
2017-09-25 16:59 gpasero Note Added: 0004334
2017-09-25 17:16 gpasero Note Added: 0004335
2017-09-28 19:24 gpasero Note Added: 0004338
2017-10-11 10:27 gpasero Note Added: 0004366
2017-10-12 09:25 grizonnetm Note Added: 0004370
2017-10-13 15:22 gpasero Note Added: 0004374
2017-10-13 15:22 gpasero Status assigned => resolved
2017-10-13 15:22 gpasero Resolution open => fixed
2017-10-17 11:22 poughov Note Added: 0004391


Copyright © 2000 - 2017 MantisBT Team
Powered by Mantis Bugtracker