ImportError: libSM.so.6: cannot open shared object file: No such file or directory
sudo yum install libXext libSM libXrender
//安装bzip2
yum -y install bzip2
//升级gcc
wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-7.1.0/gcc-7.1.0.tar.bz2
tar -xvf gcc-7.1.0.tar.bz2
cd gcc-7.1.0/
sudo ./contrib/download_prerequisites
sudo mkdir build
cd build
sudo ../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib --prefix=/usr/local/gcc-7.1.0
sudo make -j8
sudo make install -j8
安装完成后
sudo ln -s /usr/local/gcc-7.1.0/bin/gcc /usr/bin/gcc
sudo ln -s /usr/local/gcc-7.1.0/bin/g++ /usr/bin/g++
如果已经存在则删除
rm -rf /usr/bin/gcc
rm -rf /usr/bin/g++
关联lib64
export LD_LIBRARY_PATH=/usr/local/gcc-7.1.0/lib64
查看
strings /usr/local/gcc-7.1.0/lib64/libstdc++.so.6 |grep 'CXXABI'
centos7 xgcc: error trying to exec 'cc1plus': execvp: No such file or directory
//对于这个问题造成的原因很多
第一:查询gcc -v 和g++ -v 版本不一致
第二种:gcc 和g++ 版本一致
对于这个的情况,可能是你在之前升级过gcc版本,表面看起来是一致的,但是你的系统里面有的地方还是使用默认的gcc
解决的办法:
在/etc/profile 里面把cclplus地址放到环境变量中
出现/lib64/libm.so.6: version `GLIBC_2.23' not found 错误
1.wget https://ftp.gnu.org/gnu/glibc/glibc-2.23.tar.gz
2.tar xf glibc-2.23.tar.gz
3.mkdir build
4.cd build
5. ../configure --prefix=/usr/local/glibc-2.23
6.建立软连接
mv /lib64/libm.so.6 /lib64/libm.so.6.bak
ln -s /root/glibc-2.23/build/math/libm.so.6 /lib64/libm.so.6
7.测试
strings /lib64/libc.so.6 |grep GLIBC_
//错误处理
//glibc-2.23\stdlib\setenv.c
setenv.c: In function ‘__unsetenv’:
setenv.c:279:6: error: suggest explicit braces to avoid ambiguous ‘else’ [-Werror=dangling-else]
if (ep != NULL)
在源码中,找到setenv.c 文件,在279 加上{}就可以了
//glibc-2.23\sysdeps\ieee754\dbl-64\e_pow.c
error: ‘<<’ in boolean context, did you mean ‘<’ ? [-Werror=int-in-bool-
在源码中,找到e_pow.c 修改如下
if (n << (k - 20)!=0)
(n << (k - 21)!=0) ? -1 : 1;
(m << (k + 12)!=0)
(m << (k + 11)!=0) ? -1 : 1;
//glic-2.23/sunrpc/rpc_parse.c
rpc_parse.c: In function ‘get_prog_declaration’:
rpc_parse.c:543:23: error: ‘%d’ directive writing between 1 and 10 bytes into a region of size 7 [-Werror=format-overflow=]
sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
^~
rpc_parse.c:543:20: note: directive argument in the range [1, 2147483647]
sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
^~~~~~
rpc_parse.c:543:5: note: ‘sprintf’ output between 5 and 14 bytes into a destination of size 10
sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
修改成:sprintf (name, "%s%d", ARGNAME, (short)num)
//glibc-2.23\nis\nis_call.c
nis_call.c: In function ‘nis_server_cache_add’:
nis_call.c:682:6: error: suggest explicit braces to avoid ambiguous ‘else’ [-Werror=dangling-else]
if (*loc != NULL)
^
cc1: all warnings being treated as errors
改成这样:
if (*loc != NULL){
for (i = 1; i < 16; ++i)
if (nis_server_cache[i] == NULL)
{
loc = &nis_server_cache[i];
break;
}
else if ((*loc)->uses > nis_server_cache[i]->uses
|| ((*loc)->uses == nis_server_cache[i]->uses
&& (*loc)->expires > nis_server_cache[i]->expires))
loc = &nis_server_cache[i];
}
libc 软连接连接之后发生所有命令都无法运行,还原的方法
1.切换到/lib64/libc.so.6 看文件是否存在
2.如果存在,修改名字,因为这个时候,所有命令都失效了,所以可以使用
LD_PRELOAD=/lib64/libc-2.17.so mv libc.so.6 libc.so.6.bak
3.再使用 下面命令就可以还原了,每个人的系统版本可能不一样,我是centos7 你们自己可以去下面目录看看
LD_PRELOAD=/lib64/libc-2.17.so ln -s /lib64/libc-2.17.so /lib64/libc.so.6