makefile - 编译失败,“重定位 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 版本之间发生了变化),但我无法找到关于什么标志的任何信息改为放入。
我对编程很陌生,任何帮助将不胜感激!
解决方案
推荐阅读
- html - HTML 中的垃圾字符 - Google Cloud
- python - 当我使用beautifulsoup 抓取时,表格的内容被隐藏了
- android - Android 通过 JSON 与服务器通信
- wildfly - 如果野战中的依赖战争失败,如何使战争部署失败
- wpf - Windows10 的 ListBoxItem 内边距和边框
- android - 将 .so(预构建)库从另一个目录添加到 APK
- php - 获取mysql中id的计数
- javascript - javascript的按钮正在显示,但功能不起作用
- http - 使用 HTTP 将文件上传到 Dropbox
- android - 从显示空指针异常的片段调用活动方法