各linux系统gccg++版本下编译及运⾏问题记录
各linux系统gcc g++版本下编译及运⾏问题记录
项⽬在centos下编译的,换到ubuntu中调试,并在suse上发布,遇到的问题做个记录。
gcc g++多版本共存与切换
由于centos中调试太困难,转移到ubuntu中调试,编译时报错cv::imread(std::__cxx11::basic_string<char, std::char_traits, std::all。查了下发现可能是gcc和g++版本不⼀致对中std::string的定义不同造成的。
centos 7 使⽤的gcc是4.8.5,ubuntu中的是5.4,在ubuntu中安装4.9版本的gcc g++
// 查看版本
gcc -v
// 查看是否已安装gcc4.9
ls /usr/bin/gcc*
// 安装gcc g++ 4.9
sudo apt-get install gcc-4.9 gcc-4.9-multilib g++-4.9 g++-4.9-multilib
// 输⼊指令update-alternatives
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.940
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-550
// 设置使⽤的版本
sudo update-alternatives --config gcc
sudo update-alternatives --config g++
social用英语怎么说
// 输⼊命令后输⼊选择的版本,设置完毕后,gcc -v看是否成功
// 如果要删除可选项
sudo update-alternatives --remove gcc /usr/bin/gcc-4.9
suse使⽤
zypper软件管理⼯具
搜索软件
zypper search package
安装软件
zypper install package
安装某个版本的软件包
zypper install package=version
安装以某个单词名字开头的所有软件包
zypper install package*
卸载某个软件包
zypper remove package
升级某个软件包
zypper update package
获取所有可⽤新包的列表
zypper list-updates
检验软件包的依赖关系的完整性
zypper verify package
执⾏系统升级
zypper dist-upgrade
执⾏源代码软件安装和其依赖
zypper
rpm安装包
使⽤zypper安装cmake,报错Failed to mount cd:///?devices=/dev/disk/by-id/ata-VMware_Virtual_IDE…,可能是要插⼊安装盘,于是直接suse的安装包rpm⽂件安装(redhat的安装包rpm,对应debian的deb):
安装cmake 3.5编译成功,centos上是2.8.12,在这⾥cmake版本没有影响。
shell脚本判断系统类型
返回值和输出内容
shell中定义了⼀个特殊的变量“?”⽤来保存上⼀个命令结束后的返回值。
echo $?
在shell中,$?是返回值
可以直接赋给变量:
RC=$?
$?只是上⼀个命令的返回状态,⽐如成功返回0,失败返回-1。不会保存ps -ef|grep vim的输出内容.
将输出内容保存到变量中:
# 返回值
echo$?
# 保存ps -ef|grep vim的输出内容
res=`ps -ef|grep vim`
判断suse/ubuntu/centos
#!/bin/bash
SUSE=`cat /proc/version |grep SUSE`
UBUNTU=`cat /proc/version |grep Ubuntu`
CENTOS=`cat /proc/version |grep centos`
echo$SUSE
if[[$SUSE&&!$UBUNTU&&!$CENTOS]];
then
echo"is suse"
echo"do sth"
elif[[! $$SUSE&&$UBUNTU&&!$CENTOS]];
then
echo"is ubuntu"
echo"do sth"
elif[[! $$SUSE&&!$UBUNTU&&$CENTOS]];
then
echo"is centos"
echo"do sth"
else
echo"err"
fi
cmake 使⽤指定版本gcc
cmake时发现,默认使⽤的gcc低版本,不⽀持c++11。
查gcc⽬录
gcc --version :查看当前使⽤的gcc版本
which gcc:查看gcc运⾏路径
whereis gcc:查看gcc安装路径
指定使⽤gcc⽬录
cmake前,输出环境变量CC (and CXX),指定gcc执⾏⽂件位置:登录界面图片大全
export CC=/…your path…/bin/gcc
export CXX=/…your path…/bin/g++
libc及libstdc++的兼容
查看libc.so.6 libstdc++.so.6的版本
到使⽤的libc.so.6(libstdc++.so.6),直接./libc.so.6运⾏。
或者使⽤ldd --version。ldd应该是由libc.so.6提供。
报错libstdc++.so.6: version ‘GLIBCXX_3.4.14’ not found … CXXABI 1.3.8
fseeko
在使⽤gcc 4.9.4编译程序成功后,运⾏报这个错。
运⾏前,设置了LD_LIBRARY_PATH环境变量,使⽤的程序⽬录下的libc.so.6 libstdc++.so.6。
解决
通过strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
看到⽬录下的 libstdc++.so.6没有CXXABI 1.3.8。应该是gcc链接到了其他的库中。
然后通过locate libstdc++.so.6
到使⽤的gcc 4.9.4版本的libstdc++.so.6.0.20(或者任意⾼版本?)
再使⽤strings发现libstdc++.so.6.0.20中有CXXABI 1.3.8。
然后删除设置的LD_LIBRARY_PATH对应⽬录中的libstdc++.so.6,复制libstdc++.so.6.0.20到此⽬录下,创建libstdc++.so.6.0.20到libstdc++.so.6的软连接:sodu ln -sf libstdc++.so.6.0.20 libstdc++.so.6
再运⾏程序,便不会报这个错了。需注意ln命令似乎只能在linux⽂件系统中使⽤,mount的windows共享⽂件夹中⽤会报错,要复制到linux中使⽤。
附:linux系统各发⾏版本出⼚时glibc的版本列表
在低版本的glibc系统中编译,⾼版本中运⾏,会避免⼀些版本兼容的问题。
以下转⾃:
med破解版下载1. CentOS系列
centos4.0-32bit : ldd (GNU libc) 2.3.4
centos5.0-32bit : ldd (GNU libc) 2.5
centos6.0-32bit :
centos6.5-32bit :
centos7.0-32bit :
centos7.2-32bit :
centos3.1-64bit : ldd (GNU libc) 2.3.2
centos3.3-64bit : ldd (GNU libc) 2.3.2
centos4.0-64bit : ldd (GNU libc) 2.3.4
tcpip协议中tcp位于第几层
centos5.0-64bit : ldd (GNU libc) 2.5
centos6.0-64bit : ldd (GNU libc) 2.12
centos6.5-64bit : ldd (GNU libc) 2.12
centos7.0-64bit : ldd (GNU libc) 2.17
centos7.2-64bit :
centos7.4-64bit : ldd (GNU libc) 2.17
2. Redhat系列
redhat6.5-64bit : ldd (GNU libc) 2.12
redhat7.0-64bit : ldd (GNU libc) 2.17
redhat7.3-64bit : ldd (GNU libc) 2.17
3. Debian系列
debian6.0-32bit : ldd (Debian EGLIBC 2.11.3-4) 2.11.3
debian7.0-32bit : ldd (Debian EGLIBC 2.13-38+deb7u12) 2.13 debian7.0-64bit : ldd (Debian EGLIBC 2.13-38+deb7u12) 2.13 4. SuSe系列
suse9.0-32bit : ldd (GNU libc) 2.3.5
suse9.1-64bit : ldd (GNU libc) 2.3.3
suse10.0-32bit : ldd (GNU libc) 2.4
suse10.0-64bit : ldd (GNU libc) 2.3.5
suse11.0-64bit : ldd (GNU libc) 2.11.1
suse12.0-64bit : ldd (GNU libc) 2.19
opensuse42-64bit : ldd (GNU libc) 2.19
5. Fedora系列centos和ubuntu
fedora22-64bit : ldd (GNU libc) 2.22
fedora23-64bit :
6. Ubuntu系列
ubuntu12-64bit : ldd (Ubuntu EGLIBC 2.15-0ubuntu10.6) 2.15 ubuntu14-64bit : ldd (Ubuntu EGLIBC 2.19-0ubuntu6.9) 2.19 7. FreeBSD系列
freebsd11-64bit :
8. Asianux系列
Asianux Server 3-64bit : ldd (GNU libc) 2.5
9. PowerLinux系列
powerlinux6.5-64bit: ldd (GNU libc) 2.12
powerlinux7.3-64bit: ldd (GNU libc) 2.17

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。