У меня есть сторонняя библиотека, скомпилированная с помощью gcc6, с которой мне нужно связать. Поэтому я удалил стандартные пакеты GCC и установил пакет Software Collections devtoolset-6 (Centos 7.4).
$ g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/opt/rh/devtoolset-6/root/usr/libexec/gcc/x86_64-redhat-linux/6.3.1/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/opt/rh/devtoolset-6/root/usr --mandir=/opt/rh/devtoolset-6/root/usr/share/man --infodir=/opt/rh/devtoolset-6/root/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --enable-plugin --with-linker-hash-style=gnu --enable-initfini-array --disable-libgcj --with-default-libstdcxx-abi=gcc4-compatible --with-isl=/builddir/build/BUILD/gcc-6.3.1-20170216/obj-x86_64-redhat-linux/isl-install --enable-libmpx --enable-gnu-indirect-function --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
Thread model: posix
gcc version 6.3.1 20170216 (Red Hat 6.3.1-3) (GCC)
Однако я получаю много ошибок ссылок, подобных этому:
libcomsd.so: undefined reference to `operator delete[](void*, unsigned long)@CXXABI_1.3.9'
Похоже, это связано с тем, что devtoolset не поставляется с версией libstd++, скомпилированной с новым компилятором, поэтому компоновщик находит стандартную версию в /usr/lib64, которая скомпилирована с помощью gcc4, и, следовательно, несовместима с бинарным кодом libcomsd, который скомпилирован. с gcc6.
Есть ли способ заставить все это работать? Какой-то пакет libstd++, скомпилированный с помощью gcc6?
gcc63-c++-6.3.0-1.el7.x86_64.rpm
stackoverflow.com/questions/47175706/ ... поставляется с/usr/local/gcc63/lib64/libstdc++.so -> libstdc++.so.6.0.22
- person Knud Larsen   schedule 06.06.2018devtoolset-6-gcc-c++
установитdevtoolset-6-libstdc++-devel
, соответствующий libstdc++ для GCC 6.3.1, но он предоставляет только статическую библиотеку, содержащую символы, которых нет в более старой системе libstdc++. Проблема здесь в том, что для сторонней библиотеки требуется новая libstdc++ в качестве разделяемой библиотеки, потому что она не была собрана с помощью компилятора devtoolset. - person Jonathan Wakely   schedule 07.06.2018(lua_dyn.cpp.o): undefined reference to symbol 'dlsym@@GLIBC_2.2.5'
. - person Greg   schedule 12.06.2018