我获得了一个 C 项目,当我在 Ubuntu 终端中执行命令"make elevator64"时出现错误



你好,我在学习<CSE 251在C中编程>来自Web端https://www.cse.msu.edu/~cse251/project2.html.
我获得了这个项目,并在Ubuntu终端中执行了命令"makeelevator64">
但失败了。错误如下:

g++ -o elevator elevator.o -lm libElevatorLib64.a `wx-config --libs`
/usr/bin/ld: libElevatorLib64.a(ElevatorLib.o): relocation R_X86_64_32 against `.bss' can not be used when making a PIE object; recompile with -fPIC
/usr/bin/ld: libElevatorLib64.a(CApp.o): relocation R_X86_64_32S against `.rodata' can not be used when making a PIE object; recompile with -fPIC
/usr/bin/ld: libElevatorLib64.a(CFrame.o): relocation R_X86_64_32 against symbol `_ZN6CFrame13sm_eventTableE' can not be used when making a PIE object; recompile with -fPIC
/usr/bin/ld: 最后的链结失败: 输出不可表示的节
collect2: error: ld returned 1 exit status
Makefile:14: recipe for target 'elevator64' failed
make: *** [elevator64] Error 1

会发生什么
有人能帮我吗?

会发生什么?

您正试图将您的项目与一些预构建的库libElevatorLib64.a链接,该库是在没有-fPIE的情况下构建的。

但是GCC默认情况下被配置为生成PIE二进制文件,并且不能使用这样的库。

要修复此问题,请您的GCC生成一个非PIE二进制文件:

g++ -no-pie -o elevator elevator.o libElevatorLib64.a `wx-config --libs`

我终于为CSE-251-C实验室和项目构建了环境。以下是我的分享:https://github.com/elivon2000/CSE-251-Programming-in-C

最新更新