由于centos中调试太困难,转移到ubuntu中调试,编译时报错cv::imread(std::__cxx11::basic_string
// 查看版本
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.9 40
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 50
// 设置使用的版本
sudo update-alternatives --config gcc
sudo update-alternatives --config g++
// 输入命令后输入选择的版本,设置完毕后,gcc -v看是否成功
// 如果要删除可选项
sudo update-alternatives --remove gcc /usr/bin/gcc-4.9
搜索软件
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 source-install package.tgz
使用zypper安装cmake,报错Failed to mount cd:///?devices=/dev/disk/by-id/ata-VMware_Virtual_IDE…,可能是要插入安装盘,于是直接找suse的安装包rpm文件安装(redhat的安装包rpm,对应debian的deb):
https://pkgs.org/download/cmake
安装cmake 3.5编译成功,centos上是2.8.12,在这里cmake版本没有影响。
shell中定义了一个特殊的变量“?”用来保存上一个命令结束后的返回值。
echo $?
在shell中,$?是返回值
可以直接赋给变量:
RC=$?
$?只是上一个命令的返回状态,比如成功返回0,失败返回-1。不会保存ps -ef|grep vim的输出内容.
将输出内容保存到变量中:
# 返回值
echo $?
# 保存ps -ef|grep vim的输出内容
res=`ps -ef|grep vim`
#!/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低版本,不支持c++11。
gcc --version :查看当前使用的gcc版本
which gcc:查看gcc运行路径
whereis gcc:查看gcc安装路径
cmake前,输出环境变量CC (and CXX),指定gcc执行文件位置:
export CC=/…your path…/bin/gcc
export CXX=/…your path…/bin/g++
找到使用的libc.so.6(libstdc++.so.6),直接./libc.so.6运行。
或者使用ldd --version。ldd应该是由libc.so.6提供。
在使用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中使用。
在低版本的glibc系统中编译,高版本中运行,会避免一些版本兼容的问题。
以下转自:https://blog.csdn.net/Lovegengxin/article/details/81909056