我已成功安装了Tensorflow绑定和python。但是当我尝试导入Tensorflow时,我得到了以下错误。
ImportError: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.17' not found (required by /usr/local/lib/python2.7/dist-packages/tensorflow/python/_pywrap_tensorflow.so)
我试图将GLIBC_2.15更新为2.17,但没有运气。
答案 0 :(得分:19)
我刚刚设法在CentOS 6.5上使用glibc 2.12安装tensorflow 0.12rc0,没有root权限。只需通过pip安装tensorflow二进制文件就会给我一个错误,也与GLIBC版本有关。
基本上,您有4种选择如何处理(每种都有一些优点和缺点):
This is,可能是最好的选择,如果您的系统supports this,您拥有root权限,并且您确信此次升级不会破坏任何内容出于一些奇怪的原因。最终,这可以升级整个Linux发行版。 Here是热门发行版上默认GLIBC版本的简短列表。
Compile or download binary。最简单和直接的选择。特别是如果你只需要run few simple scripts。
.bashrc
。 This可能适用于TF 0.6.0,但是当每个新的tensorflow版本发布时,您可能必须从头开始。例如。 here修复了0.9.0。
如果您从源代码重新编译它并链接到您现有的GLIBC,则不再需要更新的GLIBC。不知何故,这个选项在这里没有提到任何答案。 Imho,这是最好的选择," in general"和"专门针对tensorflow"。
在过时的系统上构建张量流的快速摘要"
虽然官方指南提供了" installing from sources"部分,在过时的系统上构建它需要做一些技巧。在这里,我假设您没有root权限(如果您这样做 - 您可能能够使用包管理器安装相同的预先请求,而不是从源代码手动构建它们)。
我发现了两个记录完备的成功案例:#1,#2以及官方github上的一些有用帖子(主要是关于二进制内部链接的一组库):{{3 }},#1,#2,#3。我必须结合使用技巧,在我的案例中成功编译TF。
首先,检查一下它支持c ++ 11的gcc --version
和#4。我的是4.4.7,所以它不会工作。我是verify gcc-4.9.4源代码和downloaded。这一步非常简单,但编译本身可能需要几个小时。作为bazel问题的解决方法,我已将compiled it与as
,ld
和nm
编译为gcc。但是,您可以尝试其他解决方法:(hardcoded paths,1)。
#!/bin/sh
unset LIBRARY_PATH CPATH C_INCLUDE_PATH
unset PKG_CONFIG_PATH CPLUS_INCLUDE_PATH INCLUDE LD_LIBRARY_PATH
cd gcc-4.9.4
./contrib/download_prerequisites
mkdir objdir
cd objdir
# I've added --disable-multilib to fix the following error:
# /usr/bin/ld: crt1.o: No such file: No such file or directory
# collect2: ld returned 1 exit status
# configure: error: I suspect your system does not have 32-bit
# developement libraries (libc and headers). If you have them,
# rerun configure with --enable-multilib. If you do not have them,
# and want to build a 64-bit-only compiler, rerun configure
# with --disable-multilib.
../configure --prefix=$HOME/opt/gcc-4.9.4 \
--disable-multilib \
--disable-nls \
--enable-languages=c,c++ \
--with-ld=/usr/bin/ld \
--with-nm=/usr/bin/nm \
--with-as=/usr/bin/as
make
make install
检查java --version
。 Bazel需要JDK 8,必要时安装它。 (对于bazel-0.4.1,他们仍然2一些与jdk7相关的下载,但看起来他们认为它被弃用了。
我创建了一个单独的use_gcc_4.9.4.sh
文件,其中包含必要的环境变量。当我需要与这个较新的编译器相关的东西时,我使用source ./use_gcc_4.9.4.sh
。
#!/bin/sh
this=$HOME/opt/gcc-4.9.4
export PATH=$this/bin:$PATH
export CPATH=$this/include:$CPATH
export LIBRARY_PATH=$this/lib:$LIBRARY_PATH
export LIBRARY_PATH=$this/lib64:$LIBRARY_PATH
export LD_LIBRARY_PATH=$this/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$this/lib64:$LD_LIBRARY_PATH
当前的bazel二进制(0.4.1)provide,所以我们也必须requires GLIBC 2.14(使用我们的新gcc)。工作正常,除非您只在目标计算机上compile bazel from source。 (allowed to run a very limited number of threads帖子描述了一些其他的解决方法,但在我的情况下,他们不需要,可能是由于最近的bazel代码更新。)
获取tensorflow源代码git clone https://github.com/tensorflow/tensorflow
,并安装所需的先决条件(CUDA,cuDNN,python等)。请参阅This。
如果您不使用默认系统gcc(例如,如果必须编译较新的gcc,如上所述),请将official guide添加到tensorflow/third_party/gpus/crosstool/CROSSTOOL.tpl
,the following linker flags :
linker_flag: "-L/home/username/localinst/opt/gcc-4.9.4/lib64"
linker_flag: "-Wl,-rpath,/home/username/localinst/opt/gcc-4.9.4/lib64"
如果不执行此步骤,您可能会遇到错误消息,例如line 59:
# ERROR: /home/username/localdistr/src/tensorflow/tensorflow/tensorflow/core/debug/BUILD:33:1: null failed: protoc failed: error executing command bazel-out/host/bin/external/protobuf/protoc '--cpp_out=bazel-out/local_linux-py3-opt/genfiles/' '--plugin=protoc-gen-grpc=bazel-out/host/bin/external/grpc/grpc_cpp_plugin' ... (remaining 8 argument(s) skipped): com.google.devtools.build.lib.shell.BadExitStatusException: Process exited with status 1.
# bazel-out/host/bin/external/protobuf/protoc: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by bazel-out/host/bin/external/protobuf/protoc)
# bazel-out/host/bin/external/protobuf/protoc: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by bazel-out/host/bin/external/protobuf/protoc)
# bazel-out/host/bin/external/protobuf/protoc: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.18' not found (required by bazel-out/host/bin/external/protobuf/protoc)
最后,为了避免GLIBC依赖,我们必须通过添加-lrt
链接器标志(this -lm
来静态链接一些库。我找到了多个帖子,建议以不同的方式添加:
通过"bazel-tensorflow/external/protobuf/BUILD"(我们刚刚在上一步中编辑过的文件,就在我们已添加的行的下方)。
linker_flag: "-lrt"
linker_flag: "-lm"
通过"third_party/gpus/crosstool/CROSSTOOL.tpl"(对我有用,但不太方便,因为你需要再编辑一个文件。我不确定它是否与前一点100%相当)
没有-lrt
我再次遇到了GLIBC版本特定的错误,尝试import tensorflow
:
# ImportError: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /home/username/anaconda3/envs/myenvname/lib/python3.5/site-packages/tensorflow/python/_pywrap_tensorflow.so)
如果没有-lm
,您可能会遇到"tensorflow/tensorflow.bzl"(对我而言,结果证明没有必要)。
运行构建过程。
source ./use_gcc_4.9.4.sh
./configure
bazel build -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
pip install --upgrade /tmp/tensorflow_pkg/tensorflow-0.12.0rc0-cp35-cp35m-linux_x86_64.whl
尝试运行以下简单的python脚本来测试最基本的东西是否正常运行:
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))
a = tf.constant(10)
b = tf.constant(32)
print(sess.run(a + b))
答案 1 :(得分:16)
我试过BR_User solution并且仍然有一个烦人的事情:
ImportError: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found
我在CentOS 6.7上,它也缺少更新的c ++标准库,所以为了构建BR_User解决方案,我提取了正确的libstdc ++包,但是我发现不需要虚拟环境。
假设您已经安装了tensorflow,它会给出:
mkdir ~/my_libc_env
cd ~/my_libc_env
wget http://launchpadlibrarian.net/137699828/libc6_2.17-0ubuntu5_amd64.deb
wget http://launchpadlibrarian.net/137699829/libc6-dev_2.17-0ubuntu5_amd64.deb
wget ftp://rpmfind.net/linux/sourceforge/m/ma/magicspecs/apt/3.0/x86_64/RPMS.lib/libstdc++-4.8.2-7mgc30.x86_64.rpm
ar p libc6_2.17-0ubuntu5_amd64.deb data.tar.gz | tar zx
ar p libc6-dev_2.17-0ubuntu5_amd64.deb data.tar.gz | tar zx
rpm2cpio libstdc++-4.8.2-7mgc30.x86_64.rpm| cpio -idmv
然后使用:
运行pythonLD_LIBRARY_PATH="$HOME/my_libc_env/lib/x86_64-linux-gnu/:$HOME/my_libc_env/usr/lib64/" $HOME/my_libc_env/lib/x86_64-linux-gnu/ld-2.17.so `which python`
如果它不起作用,我有another solution,但你不会喜欢它。
答案 2 :(得分:15)
我遇到了同样的问题,所以谷歌搜索我做了这些步骤:
$ sudo pip install --upgrade virtualenv
$ virtualenv --system-site-packages ~/tensorflow
$ cd ~/tensorflow
$ source bin/activate
$ pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.5.0-cp27-none-linux_x86_64.whl
$ cd /tmp
$ wget http://launchpadlibrarian.net/137699828/libc6_2.17-0ubuntu5_amd64.deb
$ wget http://launchpadlibrarian.net/137699829/libc6-dev_2.17-0ubuntu5_amd64.deb
$ mkdir libc6_2.17
$ cd libc6_2.17
$ ar p ../libc6_2.17-0ubuntu5_amd64.deb data.tar.gz | tar zx
$ ar p ../libc6-dev_2.17-0ubuntu5_amd64.deb data.tar.gz | tar zx
$ cd -
$ LD_LIBRARY_PATH=/tmp/libc6_2.17/lib/x86_64-linux-gnu/ /tmp/libc6_2.17/lib/x86_64-linux-gnu/ld-2.17.so bin/python local/lib/python2.7/site-packages/tensorflow/models/image/mnist/convolutional.py
退出:
$ deactivate
这适合我。
答案 3 :(得分:10)
好的,这是我在previous answer中提到的另一个解决方案,它更棘手,但应该始终使用GLIBC> = 2.12和GLIBCXX> = 3.4.13的系统。 在我的情况下它是在CentOS 6.7上,但它对Ubuntu 12.04也没问题。
我们需要一个支持c ++ 11的gcc版本,无论是在另一台机器上还是在一个独立的安装上;但暂时不会。
我们要做的就是编辑_pywrap_tensorflow.so二进制文件以“弱化”其libc和libstdc ++依赖项,以便ld接受链接我们将要创建的存根。然后我们将为缺少的符号创建那些存根,最后我们将在运行python时预先加载所有这些。
首先,我要感谢詹姆斯的伟大文章(http://www.lightofdawn.org/wiki/wiki.cgi/NewAppsOnOldGlibc)和宝贵的建议,如果没有他我就不可能做到。
所以让我们从弱化依赖关系开始,它只是替换_pywrap_tensorflow.so中的正确字节。请注意,此步骤仅适用于当前版本的tensorflow(0.6.0)。所以,如果你没有创建并激活你的virtualenv,如果你有一个(如果你不是admin virtualenv是一个解决方案,另一个是将--user
标志添加到pip命令),并安装tensorflow 0.6 .0(如果你想要gpu版本,用url中的gpu替换cpu):
pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.6.0-cp27-none-linux_x86_64.whl
让我们弱化所有烦人的依赖关系,这里是exporflow的cpu版本的命令:
TENSORFLOW_DIR=`python -c "import imp; print(imp.find_module('tensorflow')[1])"`
for addr in 0xC6A93C 0xC6A99C 0xC6A9EC 0xC6AA0C 0xC6AA1C 0xC6AA3C; do printf '\x02' | dd conv=notrunc of=${TENSORFLOW_DIR}/python/_pywrap_tensorflow.so bs=1 seek=$((addr)) ; done
这是gpu one(只运行正确的一个或者你会破坏二进制文件):
TENSORFLOW_DIR=`python -c "import imp; print(imp.find_module('tensorflow')[1])"`
for addr in 0xDC5EA4 0xDC5F04 0xDC5F54 0xDC5F74 0xDC5F84 0xDC5FA4; do printf '\x02' | dd conv=notrunc of=${TENSORFLOW_DIR}/python/_pywrap_tensorflow.so bs=1 seek=$((addr)) ; done
您可以查看:
readelf -V ${TENSORFLOW_DIR}/python/_pywrap_tensorflow.so
如果您想了解这里发生了什么,请查看该文章。
现在我们要为缺少的libc符号创建存根:
mkdir ~/my_stubs
cd ~/my_stubs
MYSTUBS=~/my_stubs
printf "#include <time.h>\n#include <string.h>\nvoid* memcpy(void *dest, const void *src, size_t n) {\nreturn memmove(dest, src, n);\n}\nint clock_gettime(clockid_t clk_id, struct timespec *tp) {\nreturn clock_gettime(clk_id, tp);\n}" > mylibc.c
gcc -s -shared -o mylibc.so -fPIC -fno-builtin mylibc.c
您需要在缺少依赖关系的计算机上执行该步骤(或具有类似标准库版本的计算机(例如,在群集中))。
现在我们可能会更换机器,因为我们需要一个支持c ++ 11的gcc,而且它可能不在缺少所有依赖项的机器上(或者你可以使用最近的gcc的独立安装) 。在下面我假设我们仍然在~/my_stubs
并且不知何故你在机器上共享你的家,否则你只需要复制我们将在完成后生成的.so文件。
因此,我们可以为libstdc ++做一个存根,对于剩下的存根,我们将从gcc源代码编译它们(克隆存储库可能需要一些时间):
printf "#include <functional>\nvoid std::__throw_bad_function_call(void) {\nexit(1);\n}" > bad_function.cc
gcc -std=c++11 -s -shared -o bad_function.so -fPIC -fno-builtin bad_function.cc
git clone https://github.com/gcc-mirror/gcc.git
cd gcc
mkdir my_include
mkdir my_include/ext
cp libstdc++-v3/include/ext/aligned_buffer.h my_include/ext
gcc -I$PWD/my_include -std=c++11 -fpermissive -s -shared -o $MYSTUBS/hashtable.so -fPIC -fno-builtin libstdc++-v3/src/c++11/hashtable_c++0x.cc
gcc -std=c++11 -fpermissive -s -shared -o $MYSTUBS/chrono.so -fPIC -fno-builtin libstdc++-v3/src/c++11/chrono.cc
gcc -std=c++11 -fpermissive -s -shared -o $MYSTUBS/random.so -fPIC -fno-builtin libstdc++-v3/src/c++11/random.cc
gcc -std=c++11 -fpermissive -s -shared -o $MYSTUBS/hash_bytes.so -fPIC -fno-builtin ./libstdc++-v3/libsupc++/hash_bytes.cc
就是这样!您现在可以通过预加载所有共享库(以及本地libstdc ++)来运行tensorflow python脚本:
LIBSTDCPP=`ldconfig -p | grep libstdc++.so.6 | grep 64 | cut -d' ' -f4` #For 64bit machines
LD_PRELOAD="$MYSTUBS/mylibc.so:$MYSTUBS/random.so:$MYSTUBS/hash_bytes.so:$MYSTUBS/chrono.so:$MYSTUBS/hashtable.so:$MYSTUBS/bad_function.so:$LIBSTDCPP" python ${TENSORFLOW_DIR}/models/image/mnist/convolutional.py
:)
答案 4 :(得分:2)
注意&#39;弱化&#39; Theo Trouillon的解决方案。它仅适用于Tensorflow 0.6.0。如果你想将它应用于Tensorflow 0.9.0,它会变得更加棘手。 我的情况是CPU模式,Centos 6.7,其中GLIBC 2.12 GLIBCXX 3.4.13。
安装tensorflow:
pip uninstall protobuf
pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.9.0-cp27-none-linux_x86_64.whl
&#39; weakifying&#39;代码应该改为:
TENSORFLOW_DIR=`python -c "import imp; print(imp.find_module('tensorflow')[1])"`
for addr in 0x376e34 0x376e94 0x376ef4 0x376f14 0x376f24 0x376f44 0x376f54 ; do printf '\x02' | dd conv=notrunc of=${TENSORFLOW_DIR}/python/_pywrap_tensorflow.so bs=1 seek=$((addr)) ; done
for addr in 0x93aa4 0x93b04 ; do printf '\x02' | dd conv=notrunc of=${TENSORFLOW_DIR}/contrib/layers/python/ops/_bucketization_op.so bs=1 seek=$((addr)) ; done
for addr in 0x95bec 0x95c4c ; do printf '\x02' | dd conv=notrunc of=${TENSORFLOW_DIR}/contrib/layers/python/ops/_sparse_feature_cross_op.so bs=1 seek=$((addr)) ; done
for addr in 0x9ffec 0x9fffc 0xa005c ; do printf '\x02' | dd conv=notrunc of=${TENSORFLOW_DIR}/contrib/metrics/python/ops/_set_ops.so bs=1 seek=$((addr)) ; done
for addr in 0x96aa4 0x96b04 0x96b24; do printf '\x02' | dd conv=notrunc of=${TENSORFLOW_DIR}/contrib/linear_optimizer/python/ops/_sdca_ops.so bs=1 seek=$((addr)) ; done
以下代码应添加到新机器的存根生成代码中。
mkdir my_include/bits
cp libstdc++-v3/include/bits/shared_ptr_atomic.h my_include/bits/
cp libstdc++-v3/include/std/memory my_include/
gcc -I$PWD/my_include -std=c++11 -fpermissive -s -shared -o ${MYSTUBS}/shared_ptr.so -fPIC -fno-builtin ./libstdc++-v3/src/c++11/shared_ptr.cc
gcc -I$PWD/my_include -std=c++11 -fpermissive -s -shared -o ${MYSTUBS}/list.so -fPIC -fno-builtin ./libstdc++-v3/src/c++98/list.cc
echo "
#include <unistd.h>
#include <stdlib.h>
char * secure_getenv (const char *name) {
if ((getuid () == geteuid ()) && (getgid () == getegid ())) return getenv (name); else return NULL;
}" > getenv.cc
gcc -I$PWD/my_include -std=c++11 -fpermissive -s -shared -o ${MYSTUBS}/getenv.so -fPIC -fno-builtin getenv.cc
当然应该更改最终运行代码以包含其他存根。
LD_PRELOAD="$MYSTUBS/list.so:$MYSTUBS/mylibc.so:$MYSTUBS/shared_ptr.so:$MYSTUBS/getenv.so:$MYSTUBS/random.so:$MYSTUBS/hash_bytes.so:$MYSTUBS/chrono.so:$MYSTUBS/hashtable.so:$MYSTUBS/bad_function.so:$LIBSTDCPP" python ${TENSORFLOW_DIR}/models/image/mnist/convolutional.py
答案 5 :(得分:1)
如果您的GNU C-Library不是最新的,则主要出现该错误。 您可以使用简单的
检查您正在运行的版本$ ldd --version
输出应该是这样的:
ldd (Ubuntu EGLIBC 2.19-0ubuntu6.6) 2.19
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
2.19是您的GLIBC版本。要升级,您可以访问GNU-C Library项目网站并下载最新版本。 最新的glibc链接在这里:GNU-C library Download 在撰写此答案时,最新稳定版本为2.22 。
我尝试在Ubuntu 12.04和14.04上运行tensorflow。 Ubuntu 14.04不会抛出这个问题,因为它默认安装了glibc 2.19。
希望它有所帮助。
答案 6 :(得分:1)
我的解决方案类似于Theo T;虽然为Xubuntu 12.04(CAELinux 2013)精心调整
sudo pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.6.0-cp27-none-linux_x86_64.whl
sudo su
# prompt for password
TENSORFLOW_DIR=`python -c "import imp; print(imp.find_module('tensorflow')[1])"`
for addr in 0xC6A93C 0xC6A99C 0xC6A9EC 0xC6AA0C 0xC6AA1C 0xC6AA3C; do printf '\x02' | dd conv=notrunc of=${TENSORFLOW_DIR}/python/_pywrap_tensorflow.so bs=1 seek=$((addr)) ; done
readelf -V ${TENSORFLOW_DIR}/python/_pywrap_tensorflow.so
exit
mkdir ~/.my_stubs
cd ~/.my_stubs
MYSTUBS=~/.my_stubs
printf "#include <time.h>\n#include <string.h>\nvoid* memcpy(void *dest, const void *src, size_t n) {\nreturn memmove(dest, src, n);\n}\nint clock_gettime(clockid_t clk_id, struct timespec *tp) {\nreturn clock_gettime(clk_id, tp);\n}" > mylibc.c
gcc -s -shared -o mylibc.so -fPIC -fno-builtin mylibc.c
printf "#include <functional>\nvoid std::__throw_bad_function_call(void) {\nexit(1);\n}" > bad_function.cc
gcc -std=c++11 -s -shared -o bad_function.so -fPIC -fno-builtin bad_function.cc
git clone https://github.com/gcc-mirror/gcc.git
cd gcc
mkdir my_include
mkdir my_include/ext
cp libstdc++-v3/include/ext/aligned_buffer.h my_include/ext
gcc -I$PWD/my_include -std=c++11 -fpermissive -s -shared -o $MYSTUBS/hashtable.so -fPIC -fno-builtin libstdc++-v3/src/c++11/hashtable_c++0x.cc
gcc -std=c++11 -fpermissive -s -shared -o $MYSTUBS/chrono.so -fPIC -fno-builtin libstdc++-v3/src/c++11/chrono.cc
gcc -std=c++11 -fpermissive -s -shared -o $MYSTUBS/random.so -fPIC -fno-builtin libstdc++-v3/src/c++11/random.cc
gcc -std=c++11 -fpermissive -s -shared -o $MYSTUBS/hash_bytes.so -fPIC -fno-builtin ./libstdc++-v3/libsupc++/hash_bytes.cc
以下两个步骤将运行位于tensorflow / models / image / mnist目录中的convolution.py脚本:
LIBSTDCPP=`ldconfig -p | grep libstdc++.so.6 | grep 64 | cut -d' ' -f4` #For 64bit machines
LD_PRELOAD="$MYSTUBS/mylibc.so:$MYSTUBS/random.so:$MYSTUBS/hash_bytes.so:$MYSTUBS/chrono.so:$MYSTUBS/hashtable.so:$MYSTUBS/bad_function.so:$LIBSTDCPP" python ${TENSORFLOW_DIR}/models/image/mnist/convolutional.py
如果您希望python始终加载这些减少的依赖项,只需使用以下步骤将其添加到.bashrc文件中:
echo "LIBSTDCPP=`ldconfig -p | grep libstdc++.so.6 | grep 64 | cut -d' ' -f4`" >> ~/.bashrc
echo alias python="'"LD_PRELOAD='"''$'MYSTUBS/mylibc.so:'$'MYSTUBS/random.so:'$'MYSTUBS/hash_bytes.so:'$'MYSTUBS/chrono.so:'$'MYSTUBS/hashtable.so:'$'MYSTUBS/bad_function.so:'$'LIBSTDCPP'"' python"'" >> ~/.bashrc
如果你有ipython:
echo alias ipython="'"LD_PRELOAD='"''$'MYSTUBS/mylibc.so:'$'MYSTUBS/random.so:'$'MYSTUBS/hash_bytes.so:'$'MYSTUBS/chrono.so:'$'MYSTUBS/hashtable.so:'$'MYSTUBS/bad_function.so:'$'LIBSTDCPP'"' ipython"'" >> ~/.bashrc
基本上,我将它更新为在dist_packages而不是site-packages中完成的python安装。另外,我从gcc-mirror克隆而不是gcc的本机git页面。休息一切都是一样的。
最后几步确保每次运行python或ipython时,都会加载减少的依赖项。
答案 7 :(得分:1)
@ThéoT的答案中的链接不再有效,所以我不得不尝试几种替代方案,最终找到一种有效的方法。
mkdir ~/my_libc_env
cd ~/my_libc_env
wget http://launchpadlibrarian.net/137699828/libc6_2.17-0ubuntu5_amd64.deb
wget http://launchpadlibrarian.net/137699829/libc6-dev_2.17-0ubuntu5_amd64.deb
wget ftp://ftp.icm.edu.pl/vol/rzm5/linux-slc/centos/7.0.1406/cr/x86_64/Packages/libstdc++-4.8.3-9.el7.x86_64.rpm
ar p libc6_2.17-0ubuntu5_amd64.deb data.tar.gz | tar zx
ar p libc6-dev_2.17-0ubuntu5_amd64.deb data.tar.gz | tar zx
rpm2cpio libstdc++-4.8.3-9.el7.x86_64.rpm| cpio -idmv
使用tensorflow运行python代码
LD_LIBRARY_PATH="$HOME/my_libc_env/lib/x86_64-linux-gnu/:$HOME/my_libc_env/usr/lib64/" $HOME/my_libc_env/lib/x86_64-linux-gnu/ld-2.17.so `which python` your_program.py
答案 8 :(得分:0)
我尝试过https://stackoverflow.com/a/34897674/5929065解决方案,并且效果很好。但是无法再访问libstdc ++ - 4.8.2-7下载链接,请尝试从此页面中选择一个新的:http://rpm.pbone.net/index.php3/stat/4/idpl/31981489/dir/centos_7/com/libstdc++-4.8.5-4.el7.x86_64.rpm.html
对我来说,我用这个:
答案 9 :(得分:0)
注意:您应该通过您的平台下载deb软件包:
86:
https://launchpad.net/ubuntu/raring/i386/libc6/2.17-0ubuntu5.1
wget http://launchpadlibrarian.net/151932048/libc6_2.17-0ubuntu5.1_i386.deb
sudo dpkg -i libc6_2.17-0ubuntu5.1_i386.deb
64:
https://launchpad.net/ubuntu/raring/amd64/libc6/2.17-0ubuntu5.1
wget http://launchpadlibrarian.net/151925896/libc6_2.17-0ubuntu5.1_amd64.deb
sudo dpkg -i libc6_2.17-0ubuntu5.1_amd64.deb
在我的12.04 Ubuntu x64上测试。
答案 10 :(得分:0)
以上答案很好,但即使这样做后我仍然遇到一些问题。我跟着@Theo在rhel上的回答,我试图导出LD_LIBRARY_PATH,它抛出了一些错误,同时LD_LIBRARY_PATH还包括LD_PRELOAD为
mkdir libstdc
cd libstdc
rpm2cpio ../libstdc++-4.8.3-9.el7.x86_64.rpm| cpio -idmv
LD_LIBRARY_PATH="$HOME/my_libc_env/lib/x86_64-linux-gnu/:$HOME/my_libc_env/lib64/" LD_PRELOAD="$HOME/my_libc_env/libstdc/usr/lib64/libstdc++.so.6.0.19" $HOME/my_libc_env/lib/x86_64-linux-gnu/ld-2.17.so `which python`
你必须在运行python时总是这样做,所以制作一个加载这些变量并调用python interpreter的脚本
vim tmp.sh
LD_LIBRARY_PATH="$HOME/my_libc_env/lib/x86_64-linux-gnu/:$HOME/my_libc_env/lib64/" LD_PRELOAD="$HOME/my_libc_env/libstdc/usr/lib64/libstdc++.so.6.0.19" $HOME/my_libc_env/lib/x86_64-linux-gnu/ld-2.17.so `which python`
答案 11 :(得分:0)
在python中导入tensorflow时,我找到了“版本`GLIBC_2.14'未找到”。使用virtualenv管理在Centos6.6上的python3.5中导入tensorflow:
mkdir ~/tensorflow
cd ~/tensorflow
virtualenv --system-site-packages -p python3.5 ~/tensorflow
source bin/activate
wget http://launchpadlibrarian.net/137699828/libc6_2.17-0ubuntu5_amd64.deb
wget http://launchpadlibrarian.net/137699829/libc6-dev_2.17-0ubuntu5_amd64.deb
wget ftp://195.220.108.108/linux/mageia/distrib/4/x86_64/media/core/updates/libstdc++6-4.8.2-3.2.mga4.x86_64.rpm
wget https://rpmfind.net/linux/centos/7.4.1708/updates/x86_64/Packages/glibc-2.17-196.el7_4.2.i686.rpm
ar p libc6_2.17-0ubuntu5_amd64.deb data.tar.gz | tar zx
ar p libc6-dev_2.17-0ubuntu5_amd64.deb data.tar.gz | tar zx
rpm2cpio libstdc++6-4.8.2-3.2.mga4.x86_64.rpm | cpio -idmv
rpm2cpio glibc-2.17-196.el7_4.2.i686.rpm | cpio -idmv
pip3.5 install --upgrade tensorflow
export PYTHONPATH="$HOME/tensorflow/lib/python3.5/site-packages/"
alias tfpython='LD_LIBRARY_PATH="$HOME/tensorflow/lib/x86_64-linux-gnu/:$HOME/tensorflow/usr/lib64/" $HOME/tensorflow/lib/x86_64-linux-gnu/ld-2.17.so /usr/local/bin/python3.5'
tfpython
答案 12 :(得分:0)
尝试在运行的旧HPC Linux系统上安装numba
时遇到类似的问题
具有glibc 2.11.3(根据ldd --version
)的SUSE Linux Enterprise Server 11。我没有超级用户访问权限,并且任何常规的conda安装(通过通道defaults
,conda-forge
或numba
)都会因OSError: /lib64/libpthread.so.0: version
GLIBC_2.12 not found (required by ...envs/test1-py37/lib/python3.7/site-packages/llvmlite/binding/libllvmlite.so
而失败}。我设法通过以下步骤安装numba
:
glibc
环境中安装nlsec
pip
安装针对新安装的numba
构建的llvmlite
和glibc
:因此:
conda create -n test -c nlesc glibc
conda activate test
pip install numba
然后导入numba即可。但是,随后应注意不要将任何后续的conda install
“升级” llvmlite
到与numba
不兼容的版本,否则会出现旧问题。您可能需要to pin之一或全部使用此功能。您必须固定版本和版本。我创建了一个文件pinned
,其中包含:
llvmlite==0.27.0-pypi
numba==0.42.0-pypi
并将其放在文本文件conda-meta/pinned
中的conda环境中。
答案 13 :(得分:0)
我遇到了同样的问题,number of elements:
conda install tensorflow