#makefile #compiler-errors #fortran #ubuntu-20.04
#makefile #ошибки компилятора #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. Мой сотрудник может без проблем скомпилировать файл make в более старой версии ubuntu. Единственная разница между ее make-файлом и моим заключается в том, что я изменил ‘FC = gfortran’ на ‘FC = gfortran-9’. Это связано с тем, что gfortran больше не работает в моей версии Ubuntu, поэтому я использую gfortran-9 в качестве своего компилятора.
Из других сообщений здесь кажется, что это может быть проблемой с флагами, которые я использую (т. Е. Коды могли измениться между двумя версиями fortran), но я не смог найти никакой информации о том, какой флаг ввести вместо этого.
Я очень новичок в программировании, и любая помощь будет оценена!
Комментарии:
1. Вы пытались «перекомпилировать с помощью -fPIE», добавив в параметры компилятора?
2. Спасибо, как совершенно новый программист, это может сработать, но я не знаю, куда добавить это утверждение. Добавлю ли я его в свой makefile? Имеет ли значение, куда я помещаю его в makefile?
3. Вы можете добавить в
FCFLAGS =
строку (для некоторых шагов), но также потребуется для${FC} -fPIE
подsams43:
строкой.4. Обычно вы помещаете
${FCFLAGS}
в строку ссылки, а также в строки компиляции.