You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fedora36源码编译R遇linuxbrew gcc GLIBCXX_3.4.30报错解决方法

Fedora 36 源码编译R 4.2.0 链接libstdc++报错解决

问题复现操作

升级Fedora至36版本后,参照RStudio官方的R源码安装指引,从源码编译R 4.2.0版本,执行命令如下:

wget https://cran.r-project.org/src/base/R-4/R-4.2.0.tar.gz
tar -xzvf R-4.2.0.tar.gz
mkdir R42
cd R-4.2.0
./configure --prefix=/home/andrespara/R42 --enable-memory-profiling  --enable-R-shlib --with-blas --with-lapack
make

报错核心原因

执行make编译过程中报错退出,核心错误信息:

/home/linuxbrew/.linuxbrew/Cellar/gcc/11.3.0_1/lib/gcc/11/libstdc++.so.6 缺少系统库 /lib64/libicuuc.so.69 依赖的 GLIBCXX_3.4.30 版本符号

执行brew linkage gcc排查确认:linuxbrew安装的gcc会优先链接自身携带的libstdc++.so.6库,而非系统版本的对应库,链接输出同时包含系统基础库路径,以及linuxbrew安装的gmp、isl、mpfr等依赖库路径。

已尝试无效的操作

  • 执行brew reinstall srt
  • 执行brew doctor
  • 重装linuxbrew版本gcc
  • 执行brew update、brew upgrade

以上操作均无法解决问题。当前已知强制卸载linuxbrew版gcc(执行brew uninstall --ignore-dependencies gcc)后重新编译可成功安装R,但需要在保留linuxbrew版gcc的前提下解决报错。

可行解决方案

报错本质是linuxbrew会将自身库路径前置到系统动态链接搜索路径最前面,导致编译时加载的brew版libstdc++版本低于Fedora 36系统自带的libicu依赖的版本,无需卸载linuxbrew版gcc,通过以下任意一种方式调整链接优先级即可:

  • 临时调整环境变量(推荐)
    编译R前,先执行命令将系统库路径放到动态链接搜索路径的最高优先级:
    export LD_LIBRARY_PATH=/usr/lib64:$LD_LIBRARY_PATH
    
    再重新执行configure和make流程即可。如果要避免后续运行R时出现链接问题,可以在configure阶段追加参数固化rpath:
    ./configure --prefix=/home/andrespara/R42 --enable-memory-profiling --enable-R-shlib --with-blas --with-lapack LDFLAGS="-L/usr/lib64 -Wl,-rpath=/usr/lib64"
    
  • 临时隔离brew环境
    编译R前执行unset HOMEBREW_PREFIX,临时清除当前终端下linuxbrew的路径配置,让编译过程直接调用系统gcc、链接系统库,编译完成后关闭当前终端重新打开,即可恢复linuxbrew的正常使用。

操作前可做前置校验:执行strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX_3.4.30,如果命令返回匹配结果,说明系统自带libstdc++确实包含所需符号,上述方案均可生效。


内容的提问来源于stack exchange,提问作者Andrés Parada

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 21:01:02