【问题标题】:/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found/usr/lib/libstdc++.so.6:未找到版本“GLIBCXX_3.4.15”
【发布时间】:2011-07-10 03:20:43
【问题描述】:

如何在 Ubuntu 中获取 GLIBCXX_3.4.15?我无法运行我正在编译的某些程序。

当我这样做时:

strings /usr/lib/libstdc++.so.6 | grep GLIBC

我明白了:

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
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.4
GLIBC_2.3.4
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH

感谢您的帮助!

【问题讨论】:

    标签: c++ gcc libstdc++


    【解决方案1】:

    我正在从源代码编译 gcc 4.6,显然

    sudo make install 
    

    没抓到这个。我挖了一圈发现

    gcc/trunk/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.15
    

    我将它复制到 /usr/lib 并重定向 libstdc++.so.6 以指向新的,现在一切正常。

    【讨论】:

    • 这也适用于 gcc 4.6.2,除了它是 libstdc++.so.6.0.16。谢谢!
    • 我的是 gcc 4.7 和 libstdc++.so.6.0.17。有同样的问题,用这个解决方案解决。赞一个。
    • 是的,有。这里描述了一个基于apt-get 的解决方案:superuser.com/questions/310809/…
    • 这个蹩脚的错误已经折磨了 CENTOS/Ubuntu/Linux 用户一段时间了。为什么这些操作系统的开发人员不关心修复或更新?谢谢你的修复顺便说一句:)!
    • @roosevelt:这不是操作系统的问题,而是用户自己安装软件然后没有正确使用链接器的问题。这是一个常见问题解答:gcc.gnu.org/onlinedocs/libstdc++/faq.html#faq.how_to_set_paths
    【解决方案2】:

    我过去一直通过简单地将 libstdc++ 与链接我的可执行文件时发送到 g++ 的参数静态链接来避免这个问题:

    -static-libstdc++
    

    如果在库中静态链接是一个选项,这可能是最快的解决方法。

    【讨论】:

    • 问题是找不到库,而不是应该静态链接。请参阅@Hobo 的答案。
    【解决方案3】:

    我试图让 clang 工作(这也需要 6.0.15),在四处寻找时我发现它安装在 /usr/local/lib/libstdc++.so.6.0.15。当我安装石墨(实验性 gcc 版本)时,它安装在那里。

    如果您需要访问该位置的库,则需要将LD_LIBRARY_PATH 定义为:

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

    完成此操作后,我能够铿锵地工作。希望对某人有所帮助。

    【讨论】:

    • 我正在研究嵌入式目标,我遇到了同样的问题,您的解决方案似乎不适用于我的情况。事实上,目标中的大多数二进制文件都使用 /lib 中的默认 c 库,因此更改 LD_LIBRARY_PATH 会影响它们。他们都将链接到新库,最后大多数二进制文件都不起作用:例如ls grep,....:我得到了:ls: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
    【解决方案4】:

    我在尝试使用 matlab eng 从 c 代码调用 m 函数时遇到了这个问题。 这发生在命令mex -f .. ..

    我的解决方案:

    strings /usr/lib/i386-<tab>/libstdc++.so.6 | grep GLIBC
    

    我发现它包含 3.4.15

    所以我的系统有最新的库。

    问题来自matlab本身,它从{MATLAB}/bin调用了自己的libstdc++.so.6

    所以,只需将其替换为更新的系统库即可。

    【讨论】:

    • 这似乎也适用于Xubuntu 13.04 x64上的Matlab 2013b x64
    • 非常感谢。我只需要为{MATLAB}/bin 中的文件创建一个指向/usr/lib/ 中文件的新符号链接,然后restart matlab。这适用于 Fedora 14 x64 上的 Matlab 2010b。
    【解决方案5】:

    我刚刚在构建 LLVM 3.7 版本时遇到了类似的问题。 首先检查您是否在系统上安装了所需的库:

    $locate libstdc++.so.6.*
    

    然后将找到的位置添加到您的 $LD_LIBRARY_PATH 环境变量中。

    【讨论】:

    • 这只有在你有一个支持 GLIBCXX_3.4.15 的 libstdc++.so.6.* 库时才有效
    【解决方案6】:

    我遇到了同样的错误。这对我来说是这样的:

    • 清理了当前安装的 gcc 下的项目
    • 重新编译

    完美运行!

    【讨论】:

      【解决方案7】:

      对于这个错误,我从其他服务器复制了最新的 libstdc++.so.6.0.17,并删除了软链接并重新创建了它。

      1.将其他服务器的libstdc++.so.6.0.15或最新版本复制到受影响的系统。
      就我而言,SUSE linux 11 SP3 是最新的。
      2. rm libstdc++.so.6
      3. ln -s libstdc++.so.6.0.17 libstdc++.so.6(/usr/lib64目录下)。

      快乐

      【讨论】:

        【解决方案8】:

        有时您无法控制目标机器(例如,您的库需要在锁定的企业系统上运行)。在这种情况下,您将需要使用与其 GLIBCXX 版本相对应的 GCC 版本重新编译您的代码。 在这种情况下,您可以执行以下操作:

        1. 查找目标机器支持的最新GLIBCXX版本:strings /usr/lib/libstdc++.so.6 | grep GLIBC ...假设版本是3.4.19
        2. 使用https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html查找对应的GCC版本。在我们的例子中,这是[4.8.3, 4.9.0)

        【讨论】:

          【解决方案9】:

          gcc 版本 4.8.1,错误看起来像:

          /root/bllvm/build/Release+Asserts/bin/llvm-tblgen: /usr/lib64/libstdc++.so.6:未找到版本“GLIBCXX_3.4.15” (/root/bllvm/build/Release+Asserts/bin/llvm-tblgen 需要)

          我在编译 gcc 4.8.1 的地方找到了 libstdc++.so.6.0.18

          那我就喜欢这个

          cp ~/objdir/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.18 /usr/lib64/
          
          rm /usr/lib64/libstdc++.so.6
          
          ln -s libstdc++.so.6.0.18 libstdc++.so.6
          

          问题解决了。

          【讨论】:

            【解决方案10】:

            我已从 RPM (RPM for libstdc++) 中提取它们,然后:

            export LD_LIBRARY_PATH=.
            

            设置系统搜索当前目录中的库。然后就执行了我的程序。但就我而言,我收到了一个我需要的可执行文件,这不是系统范围的更改。

            【讨论】:

              【解决方案11】:

              我遇到了类似的问题,我通过将libstdc++ 静态链接到我正在编译的程序中解决了这个问题,如下所示:

              $ LIBS=-lstdc++ ./configure ... etc.
              

              而不是通常的

              $ ./configure ... etc.
              

              在运行时加载共享库时,此解决方案可能存在问题,但我尚未深入研究该问题,无法发表评论。

              【讨论】:

                【解决方案12】:

                GLIBCXX_3.4.14 的错误 您需要安装较新版本的 GCC。 http://pkgs.org/download/libstdc++.so.6 转到:

                http://geeksterminal.com/how-to-install-glib-glibc/1392/

                并按照说明进行操作。

                【讨论】:

                  【解决方案13】:

                  我遇到了同样的问题,因为我将用户从我自己更改为其他人:

                  由于某种原因,正常编译后我无法执行它(相同的错误消息)。直接 ssh 到其他用户帐户即可。

                  【讨论】:

                  • 这并不能真正回答问题。如果您有其他问题,可以点击 提问。您也可以add a bounty 引起更多关注。
                  • 不,因为我遇到了完全相同的问题。它是由更改用户引起的。它也可能发生在其他人身上,比如更改为 root。
                  • 我的错!我被第一行抛出,看起来你也有问题。继续!
                  • 我也使用了 Ubuntu,也尝试编译程序,也得到了与问题中相同的错误消息。我的错误是我使用 su 命令在另一个用户帐户中执行此操作。我认为这回答了这个问题,因为它解决了问题的原因和方式。这当然是一种可能性。
                  • 一个用户设置了 LD_LIBRARY_PATH 来查找较新的库,而不是另一个用户?在这个问题的具体背景下,这似乎有点牵强。
                  【解决方案14】:

                  我安装了多个版本的 gcc 编译器,需要使用比默认安装更新的版本。由于我不是我们 Linux 系统的系统管理员,我不能只更改 /usr/lib 或上面的许多其他建议。我遇到了这个问题并最终将其追踪到将我的路径设置为 32 位库目录而不是 64 位库 (lib64) 目录。由于32位目录下的库不兼容,系统默认使用旧版本,已经过时了。

                  对我引用的路径使用 -L 会发出警告,提示“在搜索 -lstdc++ 时跳过不兼容的 libstdc++.so”。这是帮助我最终解决问题的提示。

                  【讨论】:

                    【解决方案15】:

                    与 gcc 版本 4.8.1 (GCC)libstdc++.so.6.0.18 相同。必须在我的 ubuntu 盒子上复制它 /usr/lib/x86_64-linux-gnu

                    【讨论】:

                      【解决方案16】:

                      在我的例子中,LD_LIBRARY_PATH 在 /usr/local/lib64 之前首先有 /usr/lib64。 (我正在构建 llvm 3.9)。
                      我为编译 llvm 3.9 而安装的新 gcc 编译器的库在 /usr/local/lib64 下使用了较新的 GLIBCXX 库,因此我修复了 LD_LIBRARY_PATH 以便链接器首先查看 /usr/local/lib64。
                      解决了这个问题。

                      【讨论】:

                        【解决方案17】:

                        我只是在构建时使用了 -static-libstdc++。 有了这个,我可以运行 a.out

                        g++ test.cpp -static-libstdc++
                        

                        【讨论】:

                          【解决方案18】:

                          出于测试目的:

                          在原机上,找到库,复制到与可执行文件相同的目录:

                          $ ldconfig -p | grep libstdc
                                  libstdc++.so.6 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libstdc++.so.6
                                  libstdc++.so.6 (libc6) => /usr/lib32/libstdc++.so.6
                          $ cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6 .
                          

                          然后将同一个库复制到目标机器,并运行可执行文件:

                          LD_LIBRARY_PATH=. ./myexecutable
                          

                          注意:上面的命令是临时的;这不是系统范围的更改。

                          【讨论】:

                            【解决方案19】:

                            我之前也遇到过同样的问题,已经解决了,步骤可以看这个 Fixing error "GLIBCXX_3.4.15" on matlab

                            【讨论】:

                              猜你喜欢
                              • 2015-10-10
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 2022-10-08
                              • 1970-01-01
                              • 1970-01-01
                              • 2020-02-13
                              • 2017-12-27
                              相关资源
                              最近更新 更多