ошибка ldd и общего объекта Linux — как устранить неполадки?

#linux #centos #centos7 #ldd

#linux #centos #centos7 #ldd

Вопрос:

Я хотел бы узнать, как устранить следующую ошибку:

 ERROR:  could not load library "/usr/pgsql-11/lib/postgis-3.so": /lib64/libstdc  .so.6: version `GLIBCXX_3.4.20' not found (required by /usr/local/lib/libproj.so.15)
  

Похожие:

 $ ldd /usr/pgsql-11/lib/postgis-3.so
    linux-vdso.so.1 =>  (0x00007fffdd426000)
    libgeos_c.so.1 => /usr/local/lib/libgeos_c.so.1 (0x00007f2937933000)
    libproj.so.15 => /usr/local/lib/libproj.so.15 (0x00007f293744d000)
    libjson-c.so.2 => /usr/lib64/libjson-c.so.2 (0x00007f2937242000)
    libxml2.so.2 => /usr/lib64/libxml2.so.2 (0x00007f2936ed8000)
    libz.so.1 => /usr/lib64/libz.so.1 (0x00007f2936cc2000)
    libm.so.6 => /usr/lib64/libm.so.6 (0x00007f29369c0000)
    libdl.so.2 => /usr/lib64/libdl.so.2 (0x00007f29367bc000)
    libSFCGAL.so.1 => /usr/lib64/libSFCGAL.so.1 (0x00007f2935cf9000)
    libc.so.6 => /usr/lib64/libc.so.6 (0x00007f293592b000)
    libgeos-3.8.1.so => /usr/local/lib/libgeos-3.8.1.so (0x00007f2935558000)
    libstdc  .so.6 => /usr/local/lib/../lib64/libstdc  .so.6 (0x00007f293517f000)
    libgcc_s.so.1 => /usr/local/lib/../lib64/libgcc_s.so.1 (0x00007f2934f67000)
    libsqlite3.so.0 => /usr/local/lib/libsqlite3.so.0 (0x00007f2934c4a000)
    libpthread.so.0 => /usr/lib64/libpthread.so.0 (0x00007f2934a2e000)
    liblzma.so.5 => /usr/lib64/liblzma.so.5 (0x00007f2934808000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f2937e73000)
    libCGAL.so.11 => /usr/lib64/libCGAL.so.11 (0x00007f29345e0000)
    libCGAL_Core.so.11 => /usr/lib64/libCGAL_Core.so.11 (0x00007f29343a7000)
    libmpfr.so.4 => /usr/lib64/libmpfr.so.4 (0x00007f293414c000)
    libgmp.so.10 => /usr/lib64/libgmp.so.10 (0x00007f2933ed4000)
    libboost_date_time-mt.so.1.53.0 => /usr/lib64/libboost_date_time-mt.so.1.53.0 (0x00007f2933cc3000)
    libboost_thread-mt.so.1.53.0 => /usr/lib64/libboost_thread-mt.so.1.53.0 (0x00007f2933aac000)
    libboost_system-mt.so.1.53.0 => /usr/lib64/libboost_system-mt.so.1.53.0 (0x00007f29338a8000)
    libboost_serialization-mt.so.1.53.0 => /usr/lib64/libboost_serialization-mt.so.1.53.0 (0x00007f293363c000)
    librt.so.1 => /usr/lib64/librt.so.1 (0x00007f2933434000)
  

Также:

 $ echo $PATH
/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
$ echo $LD_LIBRARY_PATH
/usr/local/lib:/usr/lib:/usr/local/lib64:/usr/lib64
  

Когда я компилировал Postgis, целью был /usr/local, поэтому я озадачен, почему в ошибке упоминается /lib64/libstdc .so.6

Любые указания или помощь будут оценены, я хотел бы понять, что еще я должен попробовать / сделать.

Комментарии:

1. So /usr/local/lib/libproj.so.1 был скомпилирован с более новым glibc, но во время выполнения он ссылается на системный. В CentOS вы просто не делаете таких вещей, это корпоративная система, несмотря на то, что она также является общественной. Скомпилируйте свою библиотеку с системными библиотеками / вместо этого создайте пакет RPM.

2. Спасибо, Данила, но некоторые программы, которые мы используем, должны быть созданы с использованием более новой версии gcc. Неужели нет способа преодолеть эту неразбериху? Я впервые столкнулся с этой ошибкой после многих лет счастливых пользователей. Не могли бы вы подробнее рассказать о том, как вместо этого скомпилировать системные библиотеки / создать пакет RPM?