问题原因
链接的库使用的低版本gcc编译,链接时又使用高版本gcc,高版本的gcc自带了-fPIC编译选项
解决方法
1、Makefile中gcc编译选项加上 -no-pie
2、在高版本linux中安装低版本的gcc(以ubuntu20为例)
查看当前的gcc版本
gcc -v
讯享网
讯享网vim /etc/apt/sources.list
在末尾添加以下内容(阿里云的源,xenial就是ubuntu16的代号)
deb http://mirrors.aliyun.com/ubuntu/ xenial main deb-src http://mirrors.aliyun.com/ubuntu/ xenial main deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main deb http://mirrors.aliyun.com/ubuntu/ xenial universe deb-src http://mirrors.aliyun.com/ubuntu/ xenial universe deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates universe deb http://mirrors.aliyun.com/ubuntu/ xenial-security main deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security universe
保存文件后更新源
讯享网apt-get update
查看gcc5可选版本
apt-cache policy gcc-5
显示以下内容(我已经安装gcc5)
讯享网gcc-5: 已安装:5.4.0-6ubuntu1~16.04.12 候选: 5.4.0-6ubuntu1~16.04.12 版本列表: * 5.4.0-6ubuntu1~16.04.12 500 500 http://mirrors.aliyun.com/ubuntu xenial-updates/main amd64 Packages 500 http://mirrors.aliyun.com/ubuntu xenial-security/main amd64 Packages 100 /var/lib/dpkg/status 5.3.1-14ubuntu2 500 500 http://mirrors.aliyun.com/ubuntu xenial/main amd64 Packages
选择一个候选版本进行安装即可,比如5.4.0-6ubuntu1~16.04.12
apt-get install gcc-5=5.4.0-6ubuntu1~16.04.12
讯享网// 设置gcc5的优先级为40 update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 40 // 设置gcc9的优先级为50(数字越大优先级越小) update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 50 // 手动选择gcc5 update-alternatives --config gcc
选择对应编号即可
有 2 个候选项可用于替换 gcc (提供 /usr/bin/gcc)。 选择 路径 优先级 状态 ------------------------------------------------------------ 0 /usr/bin/gcc-9 50 自动模式 * 1 /usr/bin/gcc-5 40 手动模式 2 /usr/bin/gcc-9 50 手动模式
最后使用 gcc -v查看当前的gcc版本,显示
讯享网gcc version 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.12)
就配置成功啦
3、如果链接的库可以重新编译,使用高版本gcc重新编译一遍
编译后,如果电脑中同时存在两种版本gcc,切换到高版本gcc仍然编译不成功,这是因为gcc环境损坏,某些文件使用了低版本gcc的文件,此时需要卸载低版本gcc
sudo apt-get remove gcc-5 // 具体版本因人而异
并执行以下命令:
讯享网sudo apt-get automove

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/18683.html