unix /usr/lib/x86_64-linux-gnu/libstdc++.so.6:未找到版本CXXABI_1.3.8'

wnvonmuf  于 2023-10-18  发布在  Unix
关注(0)|答案(8)|浏览(194)

事实证明,“makeinstall”(安装并暗示目标“install-target-libstdc++v3”的make目标)实际上并不意味着您已经准备好了。
我一直在想我做错了什么,因为我认为这样一个make目标会为我做这件事。

5vf7fwbs

5vf7fwbs1#

将库的路径添加到LD_LIBRARY_PATH环境变量中

TL;DR

GCC要求您在找不到正确版本时手动告诉它您的库位于何处,这可以通过几种方式完成。一个是将其添加到LD_LIBRARY_PATH

export LD_LIBRARY_PATH="/usr/local/lib64/:$LD_LIBRARY_PATH"

对于某些情况,库路径将是/usr/local/lib64/。其他人报告说库路径/usr/lib/x86_64-linux-gnu/对他们有效。

为什么要在LD_LIBRARY_PATH中添加库?

当您编译和安装GCC时,它会将库放在其中一个目录中,但这就是它所做的一切。根据libstdc++的常见问题解答,我们得到的错误意味着动态链接器找到了libstdc++共享库的错误版本。因为链接器找不到正确的版本,我们必须告诉它在哪里可以找到libstdc++库。
解决这个问题的最简单方法是使用LD_LIBRARY_PATH环境变量,它是一个冒号分隔的目录列表,链接器将在其中搜索共享库。
还有其他方法来解决这个问题。如果阅读make输出,您可以在安装gcc时找到这个解决方案以及简要提到的其他解决方案:
库已安装在:

/usr/local/lib/../lib32

如果你碰巧想链接到给定目录LIBDIR中已安装的库,你必须使用libtool并指定库的完整路径名,或者在链接过程中使用`-LLIBDIR'标志并至少执行以下操作之一:

  • 在执行过程中将LIBDIR添加到“LD_LIBRARY_PATH”环境变量中
  • 在链接过程中将LIBDIR添加到`LD_RUN_PATH'环境变量
  • 使用`-Wl,-rpath -Wl,LIBDIR'链接器标志
  • 让系统管理员将LIBDIR添加到“/etc/ld.so.conf”

有关更多信息,请参阅任何有关共享库的操作系统文档,例如ld(1)和ld.so(8)手册页。
嗯,这很简单!还有,“如果你碰巧想链接到已安装的库”,真的吗?

ljo96ir5

ljo96ir52#

当我尝试安装TopTracker时,我在Ubuntu 14.04(Trusty Tahr)上遇到了同样的问题。我犯了这样的错误:
/usr/share/toptracker/bin/TopTracker:/usr/lib/x86_64-linux-gnu/libstdc++.so.6:未找到版本'CXXABI_1.3.8'(由/usr/share/toptracker/bin/TopTracker要求)/usr/share/toptracker/bin/TopTracker:/usr/lib/x86_64-linux-gnu/libstdc++.so.6:未找到版本'GIBCXX_3.4.21'(由/usr/share/toptracker/bin/TopTracker要求)/usr/share/toptracker/bin/TopTracker:/usr/lib/x86_64-linux-gnu/libstdc++.so.6:未找到版本'CXXABI_1.3.9'(由/usr/share/toptracker/bin/TopTracker要求)
但我随后安装了GCC 4.9.0版本(2014-04-22),问题就消失了:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-4.9 g++-4.9
brccelvz

brccelvz3#

我得到了正确的解here
正确安装gcc-4.9并将其设置为默认gcc版本的最佳方法用途:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-4.9 g++-4.9
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.9

使用--slave和g++,会使g++和gcc一起沿着切换到相同的版本。但是,此时gcc-4.9将是您在update-alternatives中配置的唯一版本,因此将4.8添加到update-alternatives中,这样实际上就有了一个替代方案,使用:

sudo apt-get install gcc-4.8 g++-4.8
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8

然后,您可以检查设置的是哪一个,并使用以下内容来回更改:

sudo update-alternatives --config gcc

注意:你可以跳过安装PPA仓库,只使用/usr/bin/gcc-4.9-base,但我更喜欢使用最新更新的工具链。

6ju8rftf

6ju8rftf4#

我的情况是gcc6失踪的那个

sudo apt-get install gcc-6 g++-6 -y

更新

sudo apt-get install gcc-7 g++-7 -y
55ooxyrt

55ooxyrt5#

这个解决方案适用于我的情况。我正在使用Ubuntu 16.04(Xenial Xerus),VirtualBox 2.7.2和Genymotion 2.7.2。同样的错误出现在我的系统中。我遵循了简单的步骤,我的问题得到了解决:

  1. LD_LIBRARY_PATH=/usr/local/lib64/:$LD_LIBRARY_PATH
  2. export LD_LIBRARY_PATH
  3. sudo apt-add-repository ppa:ubuntu-toolchain-r/test
  4. sudo apt-get update
  5. sudo apt-get install gcc-4.9 g++-4.9
gpnt7bae

gpnt7bae6#

其他答案所建议的将适用于所讨论的程序,但它有可能导致其他程序的中断和其他地方的未知依赖性。最好做一个小 Package 脚本:

#!/bin/sh
export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH
program_needing_different_run_time_library_path

通过将效果限制在需要它们的程序中,这基本上避免了Why LD_LIBRARY_PATH is bad中描述的问题。
请注意,尽管名称LD_RUN_PATH在链接时工作并且是非邪恶的,而LD_LIBRARY_PATH在链接和运行时都工作(并且 * 是 * 邪恶:)。

2mbi3lxu

2mbi3lxu7#

在Ubuntu 14.04 64 bit上安装PhantomJS时有相同的错误与gcc-4.8(CXXABI_1.3.7)
升级到gcc-4.9(CXXABI_1.3.8)修复了这个问题。HOWTO:https://askubuntu.com/questions/466651/how-do-i-use-the-latest-gcc-4-9-on-ubuntu-14-04

cld4siwp

cld4siwp8#

我在Ubuntu-64系统上尝试在Python中导入fst时遇到了这个问题:

Python 3.4.3 |Continuum Analytics, Inc.| (default, Jun  4 2015, 15:29:08)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import fst
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/ogi/miniconda3/lib/python3.4/site-packages/pyfst-0.2.3.dev0-py3.4-linux-x86_64.egg/fst/__init__.py", line 1, in <module>
    from fst._fst import EPSILON, EPSILON_ID, SymbolTable,\
ImportError: /home/ogi/miniconda3/lib/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /usr/local/lib/libfst.so.1)

然后我跑了:

ogi@ubuntu:~/miniconda3/lib$ find ~/ -name "libstdc++.so.6"
/home/ogi/miniconda3/lib/libstdc++.so.6
/home/ogi/miniconda3/pkgs/libgcc-5-5.2.0-2/lib/libstdc++.so.6
/home/ogi/miniconda3/pkgs/libgcc-4.8.5-1/lib/libstdc++.so.6
find: `/home/ogi/.local/share/jupyter/runtime': Permission denied
ogi@ubuntu:~/miniconda3/lib$

mv /home/ogi/miniconda3/lib/libstdc++.so.6 /home/ogi/miniconda3/libstdc++.so.6.old
cp /home/ogi/miniconda3/libgcc-5-5.2.0-2/lib/libstdc++.so.6 /home/ogi/miniconda3/lib/

在这一点上,我可以加载库

ogi@ubuntu:~/miniconda3/lib$ python
Python 3.4.3 |Continuum Analytics, Inc.| (default, Jun  4 2015, 15:29:08)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import fst
>>> exit()

相关问题