gcc 我在哪里可以找到GLIBCXX_3,4.29?

64jmpszr  于 2023-04-30  发布在  其他
关注(0)|答案(6)|浏览(307)

我将GCC编译器从GIT repo更新到版本11。现在我的测试代码(GoogleTest/GoogleMock)正在抱怨GLIBCXX_3。4.29找不到这不是一个重复,请重新打开答案张贴在:* Understanding the gcc version and the GLIBC, GLIBCXX versions in more detail (2 answers) * 没有回答这个问题。
连接器错误为:
/usr/lib/x86_64-linux-gnu/libstdc++.so.6: version GLIBCXX_3.4.29 not found
strings /usr/lib/x86_64-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_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBCXX_3.4.26
GLIBCXX_3.4.27
GLIBCXX_3.4.28
GLIBCXX_DEBUG_MESSAGE_LENGTH

哪里可以找到34.29?

lsmd5eda

lsmd5eda1#

sudo add-apt-repository ppa:ubuntu-toolchain-r/test # Ignore if not ubuntu

sudo apt-get update

sudo apt-get install gcc-4.9

sudo apt-get upgrade libstdc++6

完成此操作后,请确保运行以下命令:

sudo apt-get dist-upgrade

此外,请确保为正确的GLIBCXX版本安装了必要的依赖项。

strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX

也可以试试@bobka的快速解决方案

export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH # add to ~/zshrc OR bashrc whatever
rbl8hiat

rbl8hiat2#

在构建GCC并安装二进制文件之后,软链接/usr/lib/x86_64-linux-gnu/libstdc++。所以.6没有更新到最新版本。我的仍然指向上面评论中提到的以前的版本。在GCC构建目录下,我找到了GLIBCXX_3。4.29编译目录并将库复制到/usr/lib/x86_64-linux-gnu并更新了软链接。

sshcrbum

sshcrbum3#

快速解决方案

在构建项目之前运行export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH以修复链接问题。考虑将这一行添加到~/.bashrc中,使其永久化

问题解答

哪里可以找到34.29?
当您从源代码安装gcc时,我例如,运行sudo make install,你可能会看到这样的消息:

Libraries have been installed in:
   /usr/local/lib/../lib64

因此,所需的GLIBCXX版本包含在/usr/local/lib 64/libstdc中。so.6(它是到libstdc的符号链接。(6.0.29)您可以通过运行strings /usr/local/lib64/libstdc++.so.6 | grep GLIBCXX_3.4.29来验证这一点

解决方案说明

虽然你可以手动更新符号链接,但我不认为这是一种安全和推荐的方式。GCC建议使用以下选项,这些选项在安装过程中显示在同一条消息中:
如果您碰巧想要链接给定目录LIBDIR中已安装的库,则必须使用libtool并指定库的完整路径名,或者在链接过程中使用`-LLIBDIR'标志并至少执行以下操作之一:

  • 在执行过程中将LIBDIR添加到`LD_LIBRARY_PATH'环境变量
  • 在链接过程中将LIBDIR添加到`LD_RUN_PATH'环境变量
  • 使用“-Wl,-rpath -Wl,LIBDIR”链接器标志
  • 让系统管理员将LIBDIR添加到`/etc/ld。so.conf'

就我个人而言,我发现修改LD_LIBRARY_PATH是最方便的方法(参见上面的快速解决方案

nom7f22z

nom7f22z4#

当我跑的时候

strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX

我可以清楚地看到GLIBCXX_3。4.29
当我搜索

find / -name "libstdc++.so*"

它返回了许多路径-但具体来说,我的 Torch 康达环境有一个副本。..

/home/jp/miniconda3/envs/torch/lib/libstdc++.so
/home/jp/miniconda3/envs/torch/lib/libstdc++.so.6.0.21
/home/jp/miniconda3/envs/torch/lib/libstdc++.so.6.0.28
/home/jp/miniconda3/envs/torch/lib/libstdc++.so.6

我只是删除了多余的文件

sudo rm /home/jp/miniconda3/envs/torch/lib/libstdc++.so.6.0.21

现在事情又开始工作了(暂时)。

pdsfdshx

pdsfdshx5#

我转到/usr/lib/x86_64-linux-gnu/文件夹,复制libstdc++。so.6.0.29并将其粘贴到/home/xx/anaconda 3/bin/和/home/xx/anaconda 3/lib,它可以工作。

bis0qfac

bis0qfac6#

如果你试图构建一个Dockerfile,我最终从ubuntu:20.04切换到ubuntu:22.04作为基础镜像,以获得正确的GLIBCXX_版本。

相关问题