- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在使用 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/
我尝试在 CentOS 7 中向 SLURM 提交 R 脚本,如下所示: #!/bin/bash #SBATCH -J test #SBATCH -o test.o
我正在使用依赖于 libicuuc.so 和 friend 的 cmake 在 SUse Linux 上使用 g++ 编译一个共享库。 Suse 在/usr/lib 中有 libicuuc.so、li
简介 我想编译一个使用 ICU 和 libboost 的代码。为此,我使用了以下 install.sh 文件。问题是我收到此错误: /usr/bin/ld: warning: libicuuc.so.
因为我通过以下方式对 Termux 上的软件包进行了更新: pkg upgrade R 无法启动,我收到此错误消息: $R CANNOT LINK EXECUTABLE "/data/data/co
当我使用 swift build 进行编译时,我的 Ubuntu 机器出现以下错误 $swift build /home/xxxxxxxxx/Downloads/swift-DEVELOPMENT-S
我已经构建了 qt6 (6.2.0) 静态库。尝试在我的 cmake 项目(OS Ubuntu 20.04)中使用它和 出现错误: /usr/bin/ld: /home/balisong/projec
我正在尝试在 Ubuntu 下将 ICU-Timezone API 与 Netbeans c++(7.3) 结合使用。 我已经为 ICU 添加了库和包含目录。 然后我想执行这个简单的示例代码: #in
我在尝试通过 QtCreator 运行之前运行的程序时收到此警告。我还收到此警告: libicui18n.so.48,/home/maxim/install/Qt/lib/libQt5Core.so
我的应用程序在 libicuuc.so 文件中崩溃。 它只发生在 Android 6.0 的 LG 手机上。我搜索了但没有发现任何类似的问题。这是来自 Google Play 的堆栈跟踪: Build
我在运行 sentry run web 时遇到此错误。 我对此感到困惑并尝试了很多事情,例如: https://stackoverflow.com/questions/20357033/how-to-
我正在使用 gcc (Ubuntu 5.2.1-22ubuntu2) 5.2.1 20151010 进行编译,但我也尝试了 gcc 4.1.2,但我得到了同样的错误。 对于 gcc 5.2.1 str
我是一名优秀的程序员,十分优秀!