0

我正在尝试编译一个用 Fortran 编写的名为 DAOSPEC 的程序。它给了我以下错误(以及其他类似错误):

/usr/bin/ld: /home/osboxes/iraf/bin.linux64//libimfort.a(imakwc.o): 重定位 R_X86_64_32 反对 `.bss' 在制作 PIE 对象时不能使用;使用 -fPIC 重新编译

在此处查看完整日志。

我如何解决它?

我的 Makefile

FCOMP = gfortran
FFLAGS = -Wall -Wextra -fPIC -fmax-errors=1 -O3 -march=native -ffast-math -funroll-loops

.SUFFIXES: .o .f
.f.o:
    $(FCOMP) -c $(FFLAGS) $<

default : daospec

daospec: daospec.o lnxsubs.o iosubs.o mathsubs.o bothsubs.o
    $(FCOMP) -o daospec daospec.o lnxsubs.o iosubs.o mathsubs.o bothsubs.o -L/usr/local/lib/ -lcfitsio -lplotsub -ldevices -lutils -L/usr/lib/x86_64-linux-gnu/ -lX11 -L/home/YOUR_USERNAME/iraf/bin.linux64/ -limfort -lsys -lvops -L/home/YOUR_USERNAME/iraf/unix/bin.linux64/ -los -lf2c -lcurl 

clean:
    rm -rf daospec *.o

相同的 Makefile 可以在具有 Ubuntu 16.04 gfortran 5.4 的不同 PC 上运行,但在 Ubuntu 18.04 gfortran 7.3 上会中断。在这两种情况下,IRAF 库文件都是相同的。

4

1 回答 1

0

在Vladimir F的帮助下,我设法解决了这个问题。Ubuntu 18.04 使用 PIE,位置独立的可执行文件(),因此它需要使用-fPIC选项构建库。我使用的官方 IRAF 发行版中的库不是用 构建的-fPIC,这就是导致我的错误的原因。

iraf-dev幸运的是,现在可以从Ubuntu 18.04的软件包中安装 IRAF 库:

sudo apt-get install iraf-dev

或者,可以使用选项从 Github 的iraf-community/iraf-fPIC存储库编译 IRAF 。

最后,我修改了 Makefile 以使用 IRAF 库文件的新位置:/usr/lib/iraf/bin//usr/lib/iraf/unix/bin/.

FCOMP = gfortran
FFLAGS = -Wall -Wextra -fPIC -fmax-errors=1 -O3 -march=native -ffast-math -funroll-loops

.SUFFIXES: .o .f
.f.o:
  $(FCOMP) -c $(FFLAGS) $<

default : daospec

daospec: daospec.o lnxsubs.o iosubs.o mathsubs.o bothsubs.o
  $(FCOMP) -o daospec daospec.o lnxsubs.o iosubs.o mathsubs.o bothsubs.o -L/usr/local/lib/ -lcfitsio -lplotsub -ldevices -lutils -L/usr/lib/x86_64-linux-gnu/ -lX11 -L/usr/lib/iraf/bin/ -limfort -lsys -lvops -L/usr/lib/iraf/unix/bin/ -los -lf2c -lcurl

clean:
  rm -rf daospec *.o
于 2019-03-03T06:14:56.447 回答