如何修复:/usr/lib/libstdc++.so.6:找不到版本`GLIBCXX_3.4.15'

use*_*191 52 c++ linux

所以我现在急需找到解决方法.我正在编译一个共享库.所以在Ubuntu 32位(尝试在Debian和Ubuntu 64位下进行,但没有一个工作)

我不断得到:/usr/lib/libstdc++.so.6: version ``GLIBCXX_3.4.15' not found每次我尝试加载我的插件.

以下是我收到此错误的方法:

  1. 安装最新的Ubuntu 32位
  2. sudo apt-get install build-essential
  3. 编译并加载我的插件(.so)

以下是我发现并尝试过的一些链接,但没有一个对我有用:

(我的老问题:在发布这个问题后几天我以某种方式修复了它,但我不记得我是怎么做到的)

我的问题

另一个用户遇到同样的问题

而另一个

我看到一些人通过将libstdc ++(我认为)移动到某个目录然后将idk指向或链接到该目录来修复它,但这让我很困惑.

有人知道修复吗?

(编辑:) - 运行:strings /usr/lib/libstdc++.so.6 | grep GLIBC在终端给我:strings '/usr/lib/libstdc++.so.6': No such file.这可能是问题吗?如果是这样,我该如何安装这个库?

(Edit2 :)其他人都知道解决方案吗?

(编辑3)仍然需要一个解决方案.有没有办法看到在哪个发行版上编译了共享库?我知道我刚刚编译过这个相同的库,但是不记得!!

(Edit4)ldd my_lib_.so给了我:

    linux-gate.so.1 =>  (0xb77d7000)
    libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb76c1000)
    libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb76a4000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb74fa000)
    libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb74ce000)
    /lib/ld-linux.so.2 (0xb77d8000)
Run Code Online (Sandbox Code Playgroud)

ldd program_im_loading_so_into 给我:

    linux-gate.so.1 =>  (0xb77d8000)
    libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb77c0000)
    libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb77a5000)
    libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb76bb000)
    libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb768f000)
    libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb7672000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb74c9000)
    /lib/ld-linux.so.2 (0xb77d9000)
Run Code Online (Sandbox Code Playgroud)

跑步strings /usr/lib/i386-linux-gnu/libstdc++.so.6 | grep GLIBCXX给了我:

GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_DEBUG_MESSAGE_LENGTH
Run Code Online (Sandbox Code Playgroud)

最后这是我的gcc版本:

`gcc version 4.6.4 (Ubuntu/Linaro 4.6.4-1ubuntu1~12.04)`
Run Code Online (Sandbox Code Playgroud)

ker*_*rim 37

使用-static-libstdc++gcc选项静态链接到libstdc ++ .

  • 为什么这有必要?如果gcc可以使用特定版本的libstdc ++进行编译,为什么程序不能在同一台机器上使用该版本运行? (2认同)

Shu*_*moy 8

我通过安装修复了这个问题: sudo apt-get install libstdc++6

就我而言,我在安装MongoDB 3.0.1后遇到了这个问题

mongo:/usr/lib/x86_64-linux-gnu/libstdc++.so.6:未找到版本`GLIBCXX_3.4.18'(mongo需要)


lua*_*art 7

只需从nondefault存储库安装最新版本:

$ sudo add-apt-repository ppa:ubuntu-toolchain-r/test
$ sudo apt-get update
$ sudo apt-get install libstdc++6-4.7-dev
Run Code Online (Sandbox Code Playgroud)

  • 安装python-software-properties,你将有`add-apt-repository`:$ sudo apt-get install software-properties-common python-software-properties http://ubuntuforums.org/showthread.php?t=1971357 (2认同)

ygg*_*sil 3

在上面,您提到将编译作为重现步骤的一部分,但在下面您进行了编辑,

“有没有办法查看共享库是在哪个发行版上编译的?”

无论您是否在同一个发行版上编译它,甚至是同一发行版的不同版本,都是一个重要的细节,特别是对于 C++ 应用程序。

据我所知,链接到 C++ 库(包括 libstdc++)可能会产生不同的结果。这是关于使用不同版本的 c++ 重新编译的相关问题。

我们需要用 c++11 重新编译库吗?

基本上,如果您在不同的发行版(可能还有不同的 gcc 版本)上针对 c++ 进行编译,这可能会给您带来麻烦。

我认为你有两个选择:

  1. 你最好的选择 - 如果你没有在当前系统上编译你的 .so ,请重新编译它。如果运行时的系统环境有问题,甚至可能会在编译时出现。
  2. 将其他编译器的 C++ 库与您的应用程序捆绑在一起。这可能只有在相同的发行版时才可行......但如果您使用自己的编译器,这将是一个有用的技巧。如果您选择该路线,您还必须设置 LD_LIBRARY_PATH 并将其导出到包含捆绑的 stdc++ 库的路径。