编译程序集文件时出现重定位 R_x86_64_32 错误。在一个 VM 上工作,而不在另一个 VM 上工作

Getting relocation R_x86_64_32 error when compiling assembly file. Works on one VM, not on another

控制台返回给我的完整错误如下。我在 VirtualBox 和 VMware 上使用 Lubuntu(都试过了)。出于某种原因,它适用于我的笔记本电脑,但不适用于我的台式机。在尝试通过许多消息论坛了解更多信息后,我的系统上的 ld 本身似乎有问题,但我不够熟练,无法弄清楚出了什么问题。我知道“1 退出状态”意味着失败,但仅此而已。我不知道为什么会失败。如果它会 运行 在一台机器上而不是另一台机器上,则与我的代码无关。

我使用的编程语言是使用 YASM 编译器的汇编语言。编译脚本链接在错误码下方

错误代码:

/usr/bin/ld: funcs.o: relocation R_X86_64_32 against `.data' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: error: ld returned 1 exit status

编译脚本:

g++ -g -c .cpp -lglut -lGLU -lGL -lm
yasm -g dwarf2 -f elf64 .asm -l .lst
g++ -g -o  .o .o -lglut -lGLU -lGL -lm

请注意,虽然上面的脚本稍微复杂一些,但像下面这样的简单脚本也不起作用。

yasm -g dwarf2 -f elf64 .asm
yasm -g dwarf2 -f elf64 .asm
gcc -g -o  .o .o

这个问题的解决方案是从 Lubuntu 16.10 切换到 Lubuntu 14.04。该程序最终在该版本的我的系统上运行良好。不确定错误的来源是什么。