gpt4 book ai didi

c++ - 从源 : libstdc++. so.6 : version `CXXABI_1.3.8' not found (required by/usr/lib/x86_64-linux-gnu/libicuuc. so.55 构建 gcc 4.8.3 时出错)

转载 作者:IT王子 更新时间:2023-10-29 00:54:55 30 4
gpt4 key购买 nike

我正在使用 gcc (Ubuntu 5.2.1-22ubuntu2) 5.2.1 20151010 进行编译,但我也尝试了 gcc 4.1.2,但我得到了同样的错误。

对于 gcc 5.2.1

strings/usr/lib/x86_64-linux-gnu/libstdc++.so.6|grep CXXABI 给出

CXXABI_1.3
CXXABI_1.3.1
CXXABI_1.3.2
CXXABI_1.3.3
CXXABI_1.3.4
CXXABI_1.3.5
CXXABI_1.3.6
CXXABI_1.3.7
CXXABI_1.3.8
CXXABI_1.3.9
CXXABI_TM_1
CXXABI_FLOAT128

对于正在编译的编译器gcc 4.8.3

strings gcc-build/build/x86_64-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6|grep CXXABI

CXXABI_1.3
CXXABI_1.3.1
CXXABI_1.3.2
CXXABI_1.3.3
CXXABI_1.3.4
CXXABI_1.3.5
CXXABI_1.3.6
CXXABI_1.3.7
CXXABI_TM_1
CXXABI_1.3
CXXABI_1.3.2
CXXABI_1.3.6
CXXABI_1.3.1
CXXABI_1.3.5
CXXABI_1.3.4
CXXABI_TM_1
CXXABI_1.3.7
CXXABI_1.3.3

即没有 1.3.8

在运行 configure 和 make 之前我也尝试过:

export LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:$LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:$LD_LIBRARY_PATH
../gcc-4.8.3/configure --build=x86_64-linux-gnu
make

错误信息:

msgfmt -o fr.mo ../../../../gcc-4.8.3/libstdc++-v3/po/fr.po
msgfmt: gcc-build/build/x86_64-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /usr/lib/x86_64-linux-gnu/libicuuc.so.55)
msgfmt: Makefile:460: recipe for target 'de.mo' failed

使用 gcc 4.1.2 编译时出现同样的错误:

msgfmt -o fr.mo ../../../../libstdc++-v3/po/fr.po
gcc-build/gcc-4.8.3/build/x86_64-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /usr/lib/x86_64-linux-gnu/libicuuc.so.55)
Makefile:460: recipe for target 'de.mo' failed

在使用 gcc 4.1.2 编译时,我在配置和制作之前执行了以下操作

#where libraries i have compiled with gcc 4.1.2 are located i.e 
export LD_LIBRARY_PATH=/opt/devtools/gcc-4.1.2/lib
#where libstdc++.so.6 is
export LIBRARY_PATH=/opt/gcc-4.1.2/lib64

strings /opt/gcc-4.1.2/lib64/libstdc++.so.6|grep CXXABI
CXXABI_1.3
CXXABI_1.3.1
CXXABI_1.3.1
CXXABI_1.3

这让我想知道 CXXABI_1.3.8 是从哪里来的。我还在更改编译器之间做了一个“make distclean”

最佳答案

我偶然发现了一个较新的编译器组合的相同问题,即在构建 GCC 4.8.5 时使用 gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609。到目前为止制定的解决方案显然完成了工作,并对问题给出了有值(value)的一般解释。我在下面提供了更多详细信息和替代解决方案。

有问题的错误消息来自 msgfmt 程序 - gettext 的一部分,一个国际化和本地化系统:

$ which msgfmt
/usr/bin/msgfmt
$ dpkg -S /usr/bin/msgfmt
gettext: /usr/bin/msgfmt

msgfmt 被 GCC 构建系统调用,以编译当前正在构建的 C++ 标准库 (libstdc++) 发出的消息。 msgfmt 是一个动态链接的可执行文件,链接(除其他外)libicuuc.so.55 - 一个基于 Unicode 的跨平台全局化库:

$ ldd /usr/bin/msgfmt
libicuuc.so.55 => /usr/lib/x86_64-linux-gnu/libicuuc.so.55 (0x00007ff133f47000)

(为清楚起见未显示其他依赖项)

icuuc 库是一个动态链接的共享对象,它本身依赖于 stdc++ 库:

$ ldd /usr/lib/x86_64-linux-gnu/libicuuc.so.55
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007ff688a16000)

(为清楚起见未显示其他依赖项)

上面的 list 是使用我的交互式 shell 环境生成的,它将对 libstdc++.so.6 的依赖性解析为位于 /usr/lib 中的 C++ 库的系统范围版本/x86_64-linux-gnu.然而,GCC 构建环境显然解决了对当前构建过程早期阶段生成的 C++ 库的依赖,即位于 $TOP_BUILD_DIR/x86_64-linux-gnu/libstdc++-v3/src/中的库。 libs - 记忆最初发布的错误信息:

msgfmt: gcc-build/build/x86_64-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /usr/lib/x86_64-linux-gnu/libicuuc.so.55)

我得到了一个非常相似的输出:

msgfmt: /opt/build/gcc/gcc-4.8.4/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /usr/lib/x86_64-linux-gnu/libicuuc.so.55)

现在,回答最初的问题,字符串 'CXXABI_1.3.8' 来自 libicuuc.so.55 库,它需要 libstdc++.so.6它所依赖的库提供特定的 ABI 版本:

$ strings /usr/lib/x86_64-linux-gnu/libicuuc.so.55 | grep CXXABI
CXXABI_1.3.8
CXXABI_1.3

总而言之,GCC 构建系统创建了一个循环依赖,它将系统范围的二进制文件与本地库混合在一起:

libstdc++ (currenlty built) > msgfmt > libicuuc.so.55 > libstdc++.so.6

通过将 libstdc++.so.6 解析为它自己的库结构而不是系统范围的版本。

Mats Petersson提出的解决方案,其中涉及重建 libicuuc.so.55 库,使其依赖于旧版本的 libstdc++.so.6,(希望)与 GCC 构建兼容系统,当然有效。然而,这对我来说似乎有点不自然,因为它需要处理系统范围二进制文件的依赖关系,这是任何非根用户无法控制的。

我的替代解决方案涉及构建自定义版本的 gettext 包,这样 msgfmt 二进制文件是独立的,并且它的依赖项不会干扰 GCC 构建系统。可以通过在/opt中安装自定义版本的gettext,并使用环境模块调整相关路径来实现。

关于c++ - 从源 : libstdc++. so.6 : version `CXXABI_1.3.8' not found (required by/usr/lib/x86_64-linux-gnu/libicuuc. so.55 构建 gcc 4.8.3 时出错),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35392310/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com