回归CSDN & 更换gcc版本 & 编译报错/usr/bin/ld: skipping incompatible解决

本来已经打算不再使用CSDN了,起因是因为CSDN更换了一次主题之后不能恢复,用户吐槽了很久之后才换回来。因此感觉在第三方平台上写的内容不是真正属于自己的。现在习惯写博客用github pages+jekyll,个人wiki整理也从有道云笔记迁移到印象笔记,平时记录整理的需求基本满足了。但是每天还是会遇到很多坑,专门整理在笔记中感觉价值不大,不整理下来有点可惜了。因此尝试在CSDN上记录每次遇到的报错以及解决方案,方便需要时回顾&分享。

最近有更换gcc版本的需求,并且在更换gcc版本之后遇到了一些错误。

更换gcc版本:

# 20180818 update optional:
# install add-apt-repository
sudo apt-get install software-properties-common -y

 首先添加ppa到库:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
# 安装gcc/g++
sudo apt-get install gcc-4.8 g++-4.8
sudo apt-get install gcc-4.9 g++-4.9
sudo apt-get install gcc-5 g++-5
sudo apt-get install gcc-6 g++-6
# 刷新db并locate
sudo updatedb && sudo ldconfig
locate gcc | grep -E "/usr/bin/gcc-[0-9]"
locate g++ | grep -E "/usr/bin/g\+\+-[0-9]"
# 输出:
/usr/bin/gcc-4.8
/usr/bin/gcc-4.9
/usr/bin/gcc-5
/usr/bin/gcc-6
/usr/bin/g++-4.8
/usr/bin/g++-4.9
/usr/bin/g++-5
/usr/bin/g++-6
# 手工更换gcc软连接
cd /usr/bin
sudo rm g++ gcc
sudo ln -s g++-5 g++
sudo ln -s gcc-5 gcc

更换gcc版本之后,编译一个程序遇到错误如下:

gcc-6   -fno-stack-protector  bof.c -m32 -o bof-6
输出:
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/6/libgcc.a when searching for -lgcc
/usr/bin/ld: cannot find -lgcc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/6/libgcc.a when searching for -lgcc
/usr/bin/ld: cannot find -lgcc
collect2: error: ld returned 1 exit status

gcc编译时ld在链接时遇到了不合适的文件,因此需要安装对应的库文件。注意gcc-X-multilib中的X需要替换为你的gcc版本。

sudo apt-get install gcc-6-multilib

再编译就不会报错了。

你可能感兴趣的:(linux)