Ubuntu执行make elevator64遇PIE链接错误,求CSE251项目解决方案
问题原因与解决办法
问题根源
Ubuntu系统默认开启了**PIE(位置无关可执行文件)**编译/链接模式,而你项目中的静态库libElevatorLib64.a并未使用-fPIC(生成位置无关代码)参数编译,导致链接阶段无法完成符合PIE要求的重定位操作,最终触发报错。
可行解决方案
方案1:修改Makefile添加-no-pie链接选项
找到项目根目录下的Makefile,定位到elevator64目标对应的链接命令(报错信息显示为第14行),在命令末尾添加-no-pie参数:
g++ -o elevator elevator.o -lm libElevatorLib64.a `wx-config --libs` -no-pie
保存修改后,重新执行:
make elevator64
方案2:重新编译静态库(若有权限获取源码)
如果你能拿到libElevatorLib64.a的源码,在编译该库的Makefile中,给编译CFLAGS/CXXFLAGS添加-fPIC参数,例如:
CFLAGS += -fPIC CXXFLAGS += -fPIC
重新编译生成静态库后,再执行原make elevator64命令。
方案3:临时关闭全局PIE默认设置(不推荐)
在终端中执行以下命令临时覆盖系统默认编译选项,再执行构建:
export CFLAGS="-no-pie" export CXXFLAGS="-no-pie" make elevator64
该方法会影响当前终端会话中所有编译操作,仅作为临时应急方案。
内容的提问来源于stack exchange,提问作者elivon
相关产品推荐
相关产品推荐

