【问题标题】:/usr/lib/x86_64-linux-gnu/libstdc++.so.6: version CXXABI_1.3.8' not found/usr/lib/x86_64-linux-gnu/libstdc++.so.6:未找到版本 CXXABI_1.3.8'
【发布时间】:2013-12-03 16:52:51
【问题描述】:

事实证明,“make install”——安装并暗示目标“install-target-libstdc++v3”的 make 目标实际上并不意味着您已准备好开始。

我一直想知道我做错了什么,因为我认为这样的 make 目标会为我做到这一点。

【问题讨论】:

  • sudo apt-get install gcc-4.9
  • 如果您是编译程序的程序员,您可以在 gcc 命令行中添加 -static 以静态链接您的程序。见:stackoverflow.com/questions/13636513/…
  • 我投票重新打开:这是此错误消息的最高 google 结果,因此冻结答案是一个真正的劣势。
  • @Owen 实际上已经关闭了好几次——IIRC 这是我第三次发帖(说真的)——但是这个页面上的错误和“修复”在这里并没有得到真正的正确处理。只是产生错误的特定情况。

标签: c++ linux unix


【解决方案1】:

将库的路径添加到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 时,它会将库放在这些目录之一中,但仅此而已。根据FAQs for 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) 手册页。

Grr,这很简单!另外,“如果你碰巧想链接已安装的库”,认真吗?

【讨论】:

  • 您通常希望链接到您刚刚安装的随机版本的库。您的软件不会在任何其他机器上运行。通常最好使用操作系统中包含的旧版本的库。如果您确实需要构建库,那么您必须在分发软件时包含所有这些库。如果您的软件是另一个库,该库链接到另一个使用第三版 libstdc++ 的库,那么您的程序将无法正常工作。
  • @ZanLynx 不是我们拥有的 .x.y.z 的重点吗?所以这不是随机的吗?我想不是所有的东西都指定了一个版本(因此是默认的符号链接)对吧?
  • 如果目录/usr/local/lib64不存在怎么办?我确实安装了 libstdc++6 和 gcc 4.8。
  • @cxrodgers 然后只是 lib,我假设你有一个 64 位系统
  • @AlecTeal 问题是您不希望每个程序在运行时链接到新的库,这是 LD_LIBRARY_PATH 所做的.见xahlee.info/UnixResource_dir/_/ldpath.html
【解决方案2】:

尝试安装 TopTracker 时,我在 Ubuntu 14.04 上遇到了同样的问题。我遇到了这样的错误:

/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:版本'GLIBCXX_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 版本,问题就消失了:

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

【讨论】:

    【解决方案3】:

    我有正确的解决方案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
    

    g++ 的--slave 将导致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,但我更喜欢使用最新更新的工具链。

    【讨论】:

    • 不起作用。仍然给出同样的错误。
    • 如果我没有 sudo 访问权限怎么办?那么如何实施你的方法呢?
    【解决方案4】:

    在我的情况下,缺少的是 gcc 6

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

    更新

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

    【讨论】:

    • 目前你可以使用sudo apt-get install gcc-7 g++-7 -y
    【解决方案5】:

    此解决方案适用于我使用 ubuntu 16.04、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
    

    我希望这对你有用

    【讨论】:

      【解决方案6】:

      其他答案建议的内容适用于相关程序, 但它有可能导致其他程序的破坏和其他地方的未知依赖。最好做一个小包装脚本:

      #!/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 在链接和运行时都有效(并且 是邪恶的:)。

      【讨论】:

        【解决方案7】:

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

            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()
        

        【讨论】:

          【解决方案8】:

          在使用 gcc-4.8 (CXXABI_1.3.7) 的 Ubuntu 14.04 64bit 上安装 PhantomJS 时出现同样的错误

          升级到 gcc-4.9 (CXXABI_1.3.8) 解决了这个问题。如何: https://askubuntu.com/questions/466651/how-do-i-use-the-latest-gcc-4-9-on-ubuntu-14-04

          【讨论】:

            猜你喜欢
            • 2017-12-27
            • 1970-01-01
            • 2022-10-08
            • 1970-01-01
            • 1970-01-01
            • 2019-07-23
            • 1970-01-01
            • 1970-01-01
            • 2023-03-28
            相关资源
            最近更新 更多