您的位置:首页 > 运维架构 > Linux

centos 6.x 上 安装tensorflow 1.3 的一些问题总结

2017-09-08 17:06 567 查看
近期在测试服务器上安装tensorflow,由于测试服务器安装的是centos 6.5,遇到了各种问题,以下是各个问题的处理方法,供有需要的同学参考。

  

1、python里import tensorflow时报 “ImportError: /lib64/libc.so.6: version `GLIBC_2.17' not found (required by /usr/local/lib/python2.7/site-packages/tensorflow/python/_pywrap_tensorflow.so)”

主要是glibc的版本太低,默认的CentOS 6.5 glibc版本最高为2.12,
执行: strings /lib64/libc.so.6|grep GLIBC 查看目前系统支持的glibc的版本

[root@zhx-tserver2 build-2.17]# strings /lib64/libc.so.6|grep GLIBC
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_PRIVATE

tensorflow需要glibc-2.17,需要升级glibc

1)下载glibc2.17:
wget http://ftp.gnu.org/gnu/glibc/glibc-2.17.tar.gz

2)解压: 
tar -xzf glibc-2.17.tar.gz

3)创建build目录:
mkdir build

4)进入build目录编译glibc:

cd build
../glibc-2.17/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
make -j4
make install

注:如果执行configure的时候报configure: error: support for --no-whole-archive is needed,则把configure命令改成

../glibc-2.17/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include

5)查看GLIBC版本
执行 strings /lib64/libc.so.6|grep GLIBC 查看版本已经支持GLIBC_2.17

[root@zhx-tserver2 build-2.17]# strings /lib64/libc.so.6|grep GLIBC
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_2.16
GLIBC_2.17
GLIBC_PRIVATE

2、python里import tensorflow时报“ImportError: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.18' not found (required by /opt/jmr/anaconda2/lib/python2.7/site-packages/tensorflow/python/_pywrap_tensorflow.so)”

GLIBCXX的版本太低,也需要更新,拷贝一个libstdc++.so.6.0.18到/usr/lib64/目录,做个软连接即可

cp libstdc++.so.6.0.18 /usr/lib64/
cd /usr/lib64/
ln -sf libstdc++.so.6.0.18 libstdc++.so.6

3、python里import tensorflow时报
“ImportError: /usr/local/python27/lib/python2.7/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so: undefined symbol: PyUnicodeUCS4_FromString”

如果自己单独升级了python,或者有多个版本的python时,便有可能出现此问题.
问题表象为:报错:undefined symbol: PyUnicodeUCS2_AsUTF8String或者undefined symbol: PyUnicodeUCS4_AsUTF8String.
根本原因时python和某个你用的库编译时指定的UCS编码方式不对.
编译python时,可以通过指定--enable-unicode[=ucs[24]]来选择使用UCS2或者UCS4.
如果你的错误是undefined symbol: PyUnicodeUCS2_AsUTF8String,说明你的python编译时使用的是UCS4,反之依然.
解决方案两个:1,重新编译python,2,重新编译库.
选择一般是重新编译库.

我这重新编译python,因为报错是PyUnicodeUCS4_FromString,说明tensorflow是用U
4000
CS4编译的,而python是UCS2编译的:  
重新编译时设置unicode为ucs4

./configure --prefix=/usr/local/python27 --enable-unicode=ucs4

python2.7.11默认是使用UCS2.

参考:
http://blog.csdn.net/taolinke/article/details/50472451 http://blog.csdn.net/zhangweijiqn/article/details/53199553
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  tensorflow