【问题标题】:openfoam v2006 wsl2 ubuntu 20.04 GLIBCXX_3.4.26 not found未找到 openfoam v2006 wsl2 ubuntu 20.04 GLIBCXX_3.4.26
【发布时间】:2020-10-25 22:45:12
【问题描述】:

自从我在 wsl2 ubuntu 20.04 上根据指南 here 安装以来,我一直遇到与 libstc++.so.6 相关的错误,特别是 GLIBCXX_3.4.26 not found (required by ...) 其中 ... 指的是 /opt/OpenFOAM/ThirdParty-v2006/platforms/linux64/gcc-6.3.0/lib64/ 中以 @987654327 结尾的不同文件@、.so.1.so.6 等等(例如,当运行 paraFoam 时,大约 20 个这样的文件会出现错误)。我能够成功地可视化腔体教程(在 windows 上的 paraview 安装中)。

我可以通过执行用户 laborg 在 1 月 4 日针对 julia 的类似问题提出的建议(参见 here)来消除错误,特别是从 @ 复制 libstdc++.so.6 987654331@转/opt/OpenFOAM/ThirdParty-v2006/platforms/linux64/gcc-6.3.0/lib64/

问题是是否推荐这种复制粘贴解决方案;以后它会回来困扰我吗?如果在openfoam的lib64文件夹中使用系统安装中的libstdc++.so.6会不会有问题?

关于 openfoam 安装的附加信息,foamInstallationTest 显示针对 flexwmakegccg++icoFoam*critical error*gcc、@9876@ 的 *not installed* 错误, icoFoam;但我给出的herefoamInstallationTest 并不意味着从 tar 文件安装。根据空腔教程的运行,Openfoam 安装似乎没问题。

【问题讨论】:

    标签: libstdc++ ubuntu-20.04 openfoam wsl-2


    【解决方案1】:

    好的,请不要复制过去的操作来解决这个问题。该错误意味着您尚未在 ubuntu 中安装预请求库。看来你错过了教程的第一步。

    【讨论】:

      【解决方案2】:

      不推荐,但只要从该命令返回的 GLIBC 版本就不会受到伤害

      strings /opt/OpenFOAM/ThirdParty-v2006/platforms/linux64/gcc-6.3.0/lib64/libstdc++.so.6 | grep GLIBC

      是来自此命令的 GLIBC 版本的子集。

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

      毫无疑问,您的 Ubuntu 设置就是这种情况。


      风险较小的方法是将软链接 /opt/OpenFOAM/ThirdParty-v2006/platforms/linux64/gcc-6.3.0/lib64/libstdc++.so.6 重定向到您的其他 libstdc++.so.6 (这样你就可以保留两个版本)

      ln -sf /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /opt/OpenFOAM/ThirdParty-v2006/platforms/linux64/gcc-6.3.0/lib64/libstdc++.so.6

      然后,如果您遇到问题,您可以随时将链接重置回其原始目标。当然/usr/lib/x86_64-linux-gnu/libstdc++.so.6本身就是一个软链接,但是你可以照样指向它,也可以指向它的目标。


      我相信您遇到的问题是这里提到的问题https://www.cfd-online.com/Forums/main/229027-persistence-glibcxx_3-4-26-not-found.html 的衍生问题,这表明这不是您的安装错误,而是与 OpenFoam 二进制文件打包有关的问题。我同意它会由于 OpenFoam 将所有内容预先设置到路径的方式而搞砸 wsl2 设置。当然最安全的方法是使用 Ubuntu 系统的 gcc 从源代码编译,从而绕过第三方。

      【讨论】:

        【解决方案3】:

        看到你在 WSL 实例中使用 Ubuntu,也可以直接安装 Ubuntu 包

        https://develop.openfoam.com/Development/openfoam/-/wikis/precompiled/debian

        【讨论】:

          【解决方案4】:

          这个问题来自教程中的这一行:

          echo "source /opt/OpenFOAM/OpenFOAM-v2012/etc/bashrc" >> ~/.bashrc
          

          这将在您每次打开终端(或启动 WSL2 会话)时指向 OpenFOAM 的 libstdc++。如果您的工作流程与 OpenFOAM 无关,那可能是个问题。如果您在 ~/.bashrc 中删除或注释该行,事情应该会恢复正常。您可以在 WSL2 中使用 nano。

          nano ~/.bashrc
          

          然后评论:

          #source /opt/OpenFOAM/OpenFOAM-v2012/etc/bashrc
          

          但是,由于 OpenFOAM 使用该 bashrc,因此在使用 openFOAM 之前,您需要在每个终端中获取 OpenFOAM bashrc。

          source /opt/OpenFOAM/OpenFOAM-v2012/etc/bashrc
          

          我个人的选择是保留该行的注释,如果我有一个使用 OpenFOAM 的长时间工作会话,我只需使用 nano 取消注释它,因此我打开的每个外壳都可以正常工作而无需再次采购。

          还有更优雅或更复杂的方法,但我更喜欢这个。

          这个答案应该对 2006 版本也有效,你分享的链接指向 2012,所以我猜他们刚刚更新了教程。如果您安装的是 2006,请确保在获取注释/取消注释时使用正确的名称。

          以同样的方式,如果您使用另一个工具遵循另一个教程并获取另一个库,您可能会遇到问题。

          首先看看你的 bashrc 并清理它。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-04-16
            • 2021-10-29
            • 2022-07-10
            • 2021-07-31
            • 2020-09-10
            • 1970-01-01
            相关资源
            最近更新 更多