制作PIE对象时,编译失败,并出现“针对'.rodata'的重定位R_X86_64_32无法使用;使用-fPIE

时间:2020-10-07 15:50:59

标签: makefile compiler-errors fortran ubuntu-20.04

我正在尝试从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

这是我的makefile:

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文件和我的make文件之间的唯一区别是,我将“ FC = gfortran”更改为“ FC = gfortran-9”。这是因为gfortran不再适用于我的Ubuntu版本,所以我改用gfortran-9作为编译器。

通过阅读此处的其他文章,看来我使用的标志可能是一个问题(即,两个fortran版本之间的代码可能已更改),但是我找不到任何信息放在什么标志上。

我对编程非常陌生,我们将不胜感激!

0 个答案:

没有答案