【问题标题】:"'CXXABI_1.3.8' not found" in tensorflow-gpu - install from sourcetensorflow-gpu 中的“'CXXABI_1.3.8' not found” - 从源代码安装
【发布时间】:2017-02-12 04:12:25
【问题描述】:

我已经重新安装了 Anaconda2。 'python -c 'import tensorflow''时出现以下错误

ImportError: /home/jj/anaconda2/bin/../lib/libstdc++.so.6: 找不到版本“CXXABI_1.3.8”(/home/jj/anaconda2/lib/python2.7/site 需要-packages/tensorflow/python/_pywrap_tensorflow.so)

环境

  • CUDA8.0
  • cuDNN 5.1
  • gcc 5.4.1
  • 张量流 r0.10
  • Anaconda2:4.2

以下是在 bashrc 文件中

  • export PATH="/home/jj/anaconda2/bin:$PATH"
  • 导出 CUDA_HOME=/usr/local/cuda-8.0
  • 导出 PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
  • 导出 LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

【问题讨论】:

    标签: python tensorflow


    【解决方案1】:

    似乎是 Anaconda 4.* 的问题

    您可以更新 libgcc package 以匹配您的本地版本

    conda update libgcc
    

    但这将需要在您下次update anaconda 时降级“由于依赖冲突”。

    或者您可以屏蔽 anaconda libstdc++ 以便使用系统的 libstdc++

    cd ~/anaconda2/lib
    mv libstdc++.so libstdc++.so.bkp
    mv libstdc++.so.6 libstdc++.so.6.bkp
    

    您可以进一步(可选)直接在 anaconda 库中创建软链接

    ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 libstdc++.so.6
    

    对于从源代码构建(非 gpu 支持)tensorflow、Ubuntu 16.04、Anaconda 4.2.0,这些对我有用。

    来源:Building TensorFlow from source on Ubuntu 16.04 w/ GPU: `GLIBCXX_3.4.20' not found 类似的问题也指向this

    【讨论】:

    • 是否有此问题的错误跟踪链接?没找到
    • 这项工作适合我。 conda install -c anaconda tensorflow
    【解决方案2】:

    我通过复制包含版本CXXABI_1.3.8libstdc++.so.6 文件解决了这个问题。

    尝试先运行以下搜索命令:

    $ strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep CXXABI_1.3.8

    如果它返回CXXABI_1.3.8。然后你就可以进行复制了。

    $ cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /home/jj/anaconda2/bin/../lib/libstdc++.so.6

    【讨论】:

    • 这没有意义。如果您的/usr/lib/<platform>/ 目录有一个共享库的副本以及相应的 ABI,则需要它的应用程序应该可以正常工作,而无需您复制该文件。
    • 这对我有帮助!您能否进一步扩展您的答案?
    • @KyleStrand 我知道你来自哪里,但是在我复制别人的预构建二进制文件 (github.com/mind/wheels) 的情况下,这对我有用。
    • @Keith 如果适当的库已经在/usr/lib 中,那么谁构建了您尝试运行的二进制文件并不重要;如果运行时链接器已经在系统库目录中,它需要一些深刻的魔法来阻止运行时链接器找到正确的库。所以如果这行得通,还有其他事情正在进行中。
    • 为此有一个张量流issue。请注意,您实际上是在复制链接,而不是库。因此,您可以更新具有相同效果的链接。不要尝试复制实际的库,因为那是行不通的。
    【解决方案3】:

    我最终在这里寻找我的问题,相同的错误消息但不同的应用程序。

    我的应用程序给出了 /lib64/libstdc++.so.6 的错误,它指向 /lib64/libstdc++.so.6.0.19

    阅读其他网站后,我有点想我必须“替换”到我的 /lib64/libstdc++.so.6 指出的位置,并且在我的 conda 环境中找到了一个更新的版本......所以:

    (sudo) rm /system/path/to/lib/libstdc++.so.6
    (sudo) ln -s /path/to/conda/lib/libstdc++.so.6.0.26  /system/path/to/lib/libstdc++.so.6
    

    所以我想这不是最好的解决方案,但随着用户最终让应用程序正常工作。

    我也读过here,这个:

    在运行 TF 之前设置 LD_LIBRARY_PATH,所以这个 lib 只会在这个 shell 中有效。

    希望对您有所帮助。

    【讨论】:

      【解决方案4】:

      打字

      export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/jj/anaconda2/lib/
      

      终端,会解决问题。

      【讨论】:

        猜你喜欢
        • 2017-06-09
        • 2016-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多