library(magick)显示/lib64/libstdc++.so.6: version `GLIBCXX_3.4.31' not found
<h1>在RStudio Server上 library(magick)显示/lib64/libstdc++.so.6: version `GLIBCXX_3.4.31' not found</h1><h2>省流:conda下载GLIBCXX_3.4.31,然后cp到/lib64/下</h2>
<h2>报错信息:</h2>
<p>library(magick)<br />
Error: package or namespace load failed for ‘magick’ in dyn.load(file, DLLpath = DLLpath, ...):<br />
unable to load shared object '/share/apps/repos/R/20240315/lib/R/library/magick/libs/magick.so':<br />
/lib64/libstdc++.so.6: version `GLIBCXX_3.4.31' not found (required by /share/apps/repos/R/20240315/lib/R/library/magick/libs/../../../.././libheif.so.1)</p>
<p>但是我明明记得我conda装过这玩意,于是我不用RStudio Server,直接在终端的conda环境下输入:R,进入R,library(magick)竟能成功。</p>
<h2>分析</h2>
<p>RStudio Server的R说/lib64/libstdc++.so.6: version `GLIBCXX_3.4.31' not found</p>
<p>终端conda base 环境下的R没报错,说明conda路径下有`GLIBCXX_3.4.31',而/lib64/没有</p>
<p>检查一下:</p>
<pre><code class="language-bash">#看/lib64/有无GLIBCXX_3.4.31(此处/usr/lib64/几乎通用,无需改路径)
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX_3.4.31
#看conda路径有无GLIBCXX_3.4.31(此处/share/apps/repos/R/20240315/lib/ 不通用,换成你的conda路径)
strings /share/apps/repos/R/20240315/lib/libstdc++.so.6 | grepGLIBCXX_3.4.31
</code></pre>
<p>结果:conda下有。/lib64/下没有,而RStudio Server的R连的是/lib64/,所以它find不到`GLIBCXX_3.4.31'</p>
<h2>解决方案:</h2>
<p>用万能的root账户把conda的 GLIBCXX_3.4.31'复制到/usr/lib64/下就行了。</p>
<p>1、如果你的conda也没有GLIBCXX_3.4.31',那你就用conda装一个</p>
<pre><code class="language-bash">conda install -c conda-forge libstdcxx-ng
</code></pre>
<p>2、登录root。在root中操作,确认 conda 的文件存在且有 3.4.31 符号:</p>
<pre><code class="language-bash">ls -l /share/apps/repos/R/20240315/lib/libstdc++.so.6.0.34
strings /share/apps/repos/R/20240315/lib/libstdc++.so.6.0.34 | grep GLIBCXX_3.4.31
</code></pre>
<p>应该看到文件存在,且有 GLIBCXX_3.4.31 输出。</p>
<p>3、复制新版到系统路径(覆盖旧的):</p>
<pre><code class="language-bash">cp /share/apps/repos/R/20240315/lib/libstdc++.so.6.0.34 /usr/lib64/
</code></pre>
<p>4、更新符号链接(让 /usr/lib64/libstdc++.so.6 指向新版):</p>
<pre><code class="language-bash">ln -sf /usr/lib64/libstdc++.so.6.0.34 /usr/lib64/libstdc++.so.6
</code></pre>
<p>5、验证系统库现在有 3.4.31:</p>
<pre><code class="language-bash">strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX_3.4.31
</code></pre>
<p>应该输出 GLIBCXX_3.4.31。</p>
<p>6、关闭浏览器所有 RStudio 标签(一定要彻底关闭!)。<br />
重新登录 RStudio Server。然后就能正常library了</p>
<h2>感悟</h2>
<p>此环节没有意义,只是debug几个小时后没忍住的bb,我试了改RStudio Server的lib,重装旧版magick....全都不中,没想到cp一下就解决了。🤡</p>
<p>赞,不过看起来是rstudio-server找系统要了依赖,如果让他直接找conda可以试试?以下步骤:</p>
<h1>修改RStudio Server配置文件</h1>
<ol>
<li><strong>编辑配置文件</strong>:</li>
</ol>
<pre><code class="language-bash">sudo nano /etc/rstudio/rserver.conf
</code></pre>
<ol start="2">
<li><strong>添加以下两行配置</strong>(将路径替换为conda环境实际路径):</li>
</ol>
<pre><code class="language-markdown">rsession-which-r=/share/apps/repos/R/20240315/bin/R
rsession-ld-library-path=/share/apps/repos/R/20240315/lib
</code></pre>
<ol start="3">
<li><strong>重启RStudio Server</strong>:</li>
</ol>
<pre><code class="language-bash">sudo rstudio-server restart
</code></pre>
本帖最后由 galaxy 于 2026-3-16 17:15 编辑
admin 发表于 2026-3-3 20:33
赞,不过看起来是rstudio-server找系统要了依赖,如果让他直接找conda可以试试?以下步骤:
修改RStudio Se ...
我之前没敢在conf里编辑,而是在R里运行那两个配置代码。不知道是不是这个原因导致我之前失败了:'( galaxy 发表于 2026-3-16 17:12
我之前没敢在conf里编辑,而是在R里运行那两个配置代码。不知道是不是这个原因导致我之前失败了 ...
按说也行,主要配置文件确定修改保存后,重启rstudio-server
页:
[1]