如何解决:/usr/lib/libstdc++.so.6:未找到版本`GLIBCXX_3.4.15'

时间:2013-10-15 16:48:07

标签: 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)
  4. 以下是我找到并尝试过的一些链接,但没有一个对我有用:

    (我的老问题:我在发布这个问题后几天就把它修好了,但我不记得我是怎么做到的)

    My Question

    Another user with the same problem

    And another

    我看到一些人通过将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)
    

    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)
    

    运行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
    

    最后这是我的gcc版本:

    `gcc version 4.6.4 (Ubuntu/Linaro 4.6.4-1ubuntu1~12.04)`
    

9 个答案:

答案 0 :(得分:36)

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

答案 1 :(得分:7)

我通过安装: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需要)

答案 2 :(得分:5)

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

$ sudo add-apt-repository ppa:ubuntu-toolchain-r/test
$ sudo apt-get update
$ sudo apt-get install libstdc++6-4.7-dev

答案 3 :(得分:4)

这个问题可以通过安装最新的libstdc ++来解决。

$ sudo add-apt-repository ppa:ubuntu-toolchain-r/test
$ sudo apt-get update
$ sudo apt-get install libstdc++6-7-dbg

答案 4 :(得分:2)

在上面,你提到编译你作为重现步骤的一部分,但是下面你做了一个编辑说,

  

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

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

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

do we need to recompile libraries with c++11?

基本上,如果你在不同的发行版(可能是不同的gcc版本)上编译c ++,这可能会给你带来麻烦。

我认为你有两个选择:

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

答案 5 :(得分:1)

如果有人遇到与我相同的问题 - 请确保您没有从Ubuntu 14.04 repo安装到12.04机器上 - 它会出现同样的错误。从适当的存储库重新安装修复了问题。

答案 6 :(得分:0)

这对我有用:

cp <path_to>/libstdc++.so.6 $PWD
./<executable>

这个消息来自@kerin(上面提供的评论):

  

你可以查看http://stackoverflow.com/questions/13636513/linking-libstdc-statically-any-gotchas

从该链接:

  

如果你把较新的libstdc ++。so放在与可执行文件相同的目录中,它将在运行时找到,问题就解决了。

我得到的错误是libstdc ++。so.6来自/ usr / lib64 /,但这不是我链接的库!消息看起来像:

<executing_binary>: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by <executing_binary>)

我确认LD_LIBRARY_PATH有目录(并且它是第一个路径)。出于某种原因,在运行时它仍然在查看/ usr / lib64 / libstdc ++。so.6。

我从上面的文章中得到了建议,并将libstdc ++。so.6从我链接到我的可执行文件的目录中复制,从那里运行,然后就可以了!

答案 7 :(得分:0)

也许这个问题的答案在这里也有用: how to find libstdc++.so.6: that contain GLIBCXX_3.4.19 for RHEL 6?

curl -O http://ftp.de.debian.org/debian/pool/main/g/gcc-4.7/libstdc++6-4.7-dbg_4.7.2-5_i386.deb
ar -x libstdc++6-4.7-dbg_4.7.2-5_i386.deb && tar xvf data.tar.gz
mkdir backup
cp /usr/lib/libstdc++.so* backup/
cp ./usr/lib/i386-linux-gnu/debug/libstdc++.so.6.0.17 /usr/lib
ln -s libstdc++.so.6.0.17 libstdc++.so.6

答案 8 :(得分:0)

实际上,您需要先更新您的存储库,然后升级您的 Glibc 才能解决此问题。