我正在尝试从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版本之间的代码可能已更改),但是我找不到任何信息放在什么标志上。
我对编程非常陌生,我们将不胜感激!