我知道这个问题已被多次询问,而我仍然坚持使用它。 我已经回顾了以前问过的所有答案 version `CXXABI_1.3.8' not found (required by ...)
我读过https://gcc.gnu.org/onlinedocs/libstdc++/faq.html#faq.how_to_set_paths
我的系统是RHEL7,我之前安装了gcc 4.8,并使用yum -y install devtoolset-3-gcc devtoolset-3-gcc-c++
安装gcc 4.9
然后成功安装了gcc 4.9。
使用gcc -v
,我得到了
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/opt/rh/devtoolset-3/root/usr/libexec/gcc/x86_64-redhat-linux/4.9.2/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --prefix=/opt/rh/devtoolset-3/root/usr --mandir=/opt/rh/devtoolset-3/root/usr/share/man --infodir=/opt/rh/devtoolset-3/root/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --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-languages=c,c++,fortran,lto --enable-plugin --with-linker-hash-style=gnu --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.9.2-20150212/obj-x86_64-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.9.2-20150212/obj-x86_64-redhat-linux/cloog-install --enable-gnu-indirect-function --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
Thread model: posix
gcc version 4.9.2 20150212 (Red Hat 4.9.2-6) (GCC)
然后我按照其他人的建议设置LD_LIBRARY_PATH
,如:
export LD_LIBRARY_PATH=/opt/rh/devtoolset-3/root/usr/lib/gcc/x86_64-redhat-linux/4.9.2:${LD_LIBRARY_PATH}
然而,错误仍然存在,似乎我的新版本gcc4.9不起作用。 任何帮助,将不胜感激!
答案 0 :(得分:4)
问题出现了,因为devtoolset-x
包实际上只包装标准系统libstdc++.so
所以即使你有一个新的编译器,你仍然有旧的ABI(应用程序二进制接口)。所以你真正需要的是一个全新的编译器!其中将包含一个新的库。
要构建编译器,您需要安装一些依赖项:
sudo yum install gmp-devel mpfr-devel libmpc-devel
您可以下载更新版本的GCC from one of the official mirrors,获取gcc-8.3.0.tar.gz
等版本,将其解压缩并放在该目录中
./configure --disable-multilib --enable-languages=c,c++ --prefix=$HOME/local
make -j5
make -j install
然后,只要您需要现代ABI,
export LD_LIBRARY_PATH=$HOME/local/lib64
一切都可能开始发挥作用。如果您的应用程序产生自己的环境(例如Steam),您可能希望将库放在它正在搜索的路径中。
“重复”答案错误或过时;这是今天的正确解决方案。我知道,因为我尝试了所有这些,这才是真正有用的......