无法使用错误链接IRAF库重定位R_X86_64_32

问题描述 投票:0回答:1

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

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

查看完整的日志here

我如何解决它?

My 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可以在不同的PC上使用Ubuntu 16.04 gfortran 5.4,但是在Ubuntu 18.04 gfortran 7.3上打破。在这两种情况下,IRAF库文件都是相同的。

fortran linker-errors gfortran
1个回答
0
投票

Vladimir F的帮助下,我设法解决了这个问题。 Ubuntu 18.04使用PIE,位置无关的可执行文件(source),因此它需要使用-fPIC选项构建库。我使用的official IRAF distribution中的库不是用-fPIC构建的,这就是造成我错误的原因。

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

sudo apt-get install iraf-dev

或者,可以使用iraf-community/iraf选项从Github的-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
© www.soinside.com 2019 - 2024. All rights reserved.