2025年解决make编译时报错:can not be used when makeing a PIE object;recomplie with -fPIE

解决make编译时报错:can not be used when makeing a PIE object;recomplie with -fPIE问题原因 链接的库使用的低版本 gcc 编译 链接时又使用高版本 gcc 高版本的 gcc 自带了 fPIC 编译选项 解决方法 1 Makefile 中 gcc 编译选项加上 no pie 自己电脑上的项目 虽然 Makefile 可以随意更改

大家好,我是讯享网,很高兴认识大家。

问题原因

链接的库使用的低版本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 
小讯
上一篇 2025-02-28 10:43
下一篇 2025-01-28 21:56

相关推荐

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