首页 > 解决方案 > 编译失败,“重定位 R_X86_64_32 对 '.rodata' 不能在制作 PIE 对象时使用;使用 -fPIE 重新编译

问题描述

我正在尝试从 makefile 编译一些源代码,但它不起作用。我得到的错误是

gfortran-9 -o sams43 sams43.o mvnorm.o isml_wrapper.o
/usr/bin/ld: sams43.o: relocation R_X86_64_32 against '.rodata' can not be used when making a PIE object; recompile with -fPIE
collect2: error: ld returned 1 exit status
make: *** [makefile:7: sams43] Error 1

这是我的生成文件:

FC=gfortran-9
FCFLAGS= -g

all: sams43 normal_dataset

sams43: sams43.o mvnorm.o imsl_wrapper.o 
    ${FC} -o sams43 sams43.o mvnorm.o imsl_wrapper.o

imsl_wrapper.o: imsl_wrapper.f90
    ${FC} ${FCFLAGS} -c imsl_wrapper.f90

sams43.o: sams43.f90
    ${FC} ${FCFLAGS} -c sams43.f90

mvnorm.o: mvnorm.f90
    ${FC} ${FCFLAGS} -c mvnorm.f90

normal_dataset: normal_dataset.o mvnorm.o
    ${FC} -o normal_dataset normal_dataset.o mvnorm.o

normal_dataset.o: normal_dataset.f90
    ${FC} ${FCFLAGS} -c normal_dataset.f90

clean:
#   rm *.o sams43 normal_dataset

我正在使用 Ubuntu 20.04。我的合作者能够毫无问题地在旧版本的 ubuntu 上编译 make 文件。她的 make 文件和我的唯一区别是我将 'FC=gfortran' 更改为 'FC=gfortran-9'。这是因为 gfortran 不再适用于我的 Ubuntu 版本,所以我使用 gfortran-9 作为我的编译器。

通过阅读此处的其他帖子,似乎我正在使用的标志可能是一个问题(即代码可能在两个 fortran 版本之间发生了变化),但我无法找到关于什么标志的任何信息改为放入。

我对编程很陌生,任何帮助将不胜感激!

标签: makefilecompiler-errorsfortranubuntu-20.04

解决方案


推荐阅读