无法使用链接 IRAF 库重定位 R_X86_64_32 的错误
Error linking IRAF library relocation R_X86_64_32 against can not be used
我正在尝试编译一个用 Fortran 编写的名为 DAOSPEC 的程序。它给了我以下错误(以及类似的错误):
/usr/bin/ld: /home/osboxes/iraf/bin.linux64//libimfort.a(imakwc.o): relocation R_X86_64_32 against `.bss' can not be used when making a PIE object; recompile with -fPIC
查看完整日志 here。
我该如何解决?
我的生成文件
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 库文件都是相同的。
在 Vladimir F. Ubuntu 18.04 uses PIE, position independent executables (source), and thus it requires libraries to be built with -fPIC
option. The libraries in the official IRAF distribution 的帮助下,我已经设法解决了这个问题,我使用的不是用 -fPIC
构建的,这就是导致我出错的原因。
幸运的是,现在可以从 Ubuntu 18.04 上的 iraf-dev
软件包安装 IRAF 库:
sudo apt-get install iraf-dev
或者,可以使用 -fPIC
选项从 Github 的 iraf-community/iraf 存储库编译 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
我正在尝试编译一个用 Fortran 编写的名为 DAOSPEC 的程序。它给了我以下错误(以及类似的错误):
/usr/bin/ld: /home/osboxes/iraf/bin.linux64//libimfort.a(imakwc.o): relocation R_X86_64_32 against `.bss' can not be used when making a PIE object; recompile with -fPIC
查看完整日志 here。
我该如何解决?
我的生成文件
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 库文件都是相同的。
在 Vladimir F. Ubuntu 18.04 uses PIE, position independent executables (source), and thus it requires libraries to be built with -fPIC
option. The libraries in the official IRAF distribution 的帮助下,我已经设法解决了这个问题,我使用的不是用 -fPIC
构建的,这就是导致我出错的原因。
幸运的是,现在可以从 Ubuntu 18.04 上的 iraf-dev
软件包安装 IRAF 库:
sudo apt-get install iraf-dev
或者,可以使用 -fPIC
选项从 Github 的 iraf-community/iraf 存储库编译 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