/usr/lib/x86_64-linux-gnu/libstdc++.so.6:找不到版本CXXABI_1.3.8'[关闭]


74

我最近寻求帮助/programming/20253515/no-idea-as-to-usr-lib-x86-64-linux-gnu-libstdc-so-6-version-cxxabi-1-3 -8,它被拒绝投票并关闭(我不知道为什么)

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

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

我希望这个答案至少可以帮助其他人。


sudo apt-get install gcc-4.9
Yuliia Ashomok

如果您是编译程序的程序员,则可以添加-static到gcc命令行以静态链接您的程序。见:stackoverflow.com/questions/13636513/...
青铜人

17
我投票决定重新开放:这是此错误消息的Google最高结果,因此冻结答案是一个真正的缺点。
Owen

@Owen实际上已经关闭了好几次-IIRC这是我的第三次发布(严重)-但是,此页面上的错误和“修复”在此处并未得到正确处理。只是产生错误的特定情况。
亚历克·蒂尔

Answers:


54

对于所有遇到类似问题的人,请运行以下命令:

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

编译并安装GCC时,确实会将库放在此处,仅此而已。如常见问题解答所述(http://gcc.gnu.org/onlinedocs/libstdc++/faq.html#faq.how_to_set_paths),您需要添加它。

我假设“如何确保可以找到动态链接的库?”的意思是“如何确保始终找到该动态链接的库”,而不是“不会找到它,您需要这样做”

对于那些不介意设置前缀的人,它是/ usr / local / lib64

如果您阅读make输出,则可以在安装gcc时简短地找到此内容:

Libraries have been installed in:
   /usr/local/lib/../lib32
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable
     during linking
   - use the `-Wl,-rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages. 

太简单了!另外,“如果您碰巧想要链接到已安装的库”,是认真的吗?


2
通常希望链接到刚安装的库的随机版本。您的软件将无法在任何其他计算机上运行。通常,最好使用操作系统随附的库的旧版本。如果确实需要构建库,则在分发软件时必须包括所有库。并且,如果您的软件是链接到另一个库的另一个库,该库正在使用libstdc ++的第三版本,则您的程序将无法正常工作。
Zan Lynx 2013年

1
@ZanLynx不是我们拥有的.xyz的重点吗?所以不是随机的吗?我想不是所有内容都指定了一个版本(因此是默认的符号链接),对吗?
亚历克·蒂尔

如果目录/ usr / local / lib64不存在怎么办?我确实安装了libstdc ++ 6和gcc 4.8。
cxrodgers 2015年

@cxrodgers然后是lib,我以为您将拥有64位系统
Alec Teal

2
@AlecTeal问题是您不希望每个程序在运行时链接到新的lib ,这是LD_LIBRARY_PATH的作用。参见xahlee.info/UnixResource_dir/_/ldpath.html
Britton Kerin,

21

尝试安装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

10

这里有正确的解决方案。

正确安装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,但是我更喜欢使用最新的更新工具链。


2
不起作用 仍然给出相同的错误。
阿克斯哈扎里

如果我没有sudo访问权限怎么办?那么如何实施您的方法呢?
Rishabh Agrahari '12

3

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

我希望这对你有用


3

在我的情况下,它是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
Lrrr

2

其他答案所建议的内容将适用于所讨论的程序,但有可能导致其他程序损坏以及其他地方的未知依赖关系。最好制作一个小的包装脚本:

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

通过将效果限制在需要它们的程序中,这大部分可以避免LD_LIBRARY_PATH为什么不好的问题。

请注意,尽管名称LD_RUN_PATH在链接时有效,但不是邪恶的,而LD_LIBRARY_PATH在链接和运行时均有效(并且邪恶的:)。



0

当我尝试在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()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.