2017-04-14 159 views
0

我有一个32位Fortran代码,需要在64位机器上编译。我研究并发现可以做到这一点。我安装了gfortran-multilib来编译它。但我得到的错误是这样的:在64位Ubuntu上编译32位Fortran程序14.04

gfortran -lm bessj.o bessj0.o bessj1.o bessj2.o caxcb.o cgemp.o cmemcpy.o four1.o gemp.o getdata.o qsbstab.o qsfftinv.o qshkpsv.o qshksh.o qskern.o qslayer.o qsmainC.o qsmatinv.o qsmatrix.o qsmoment.o qspsv.o qsqmodel.o qssh.o qssublay.o qswaveno.o qswvint.o wavelet.o -o qsmainC.0 
/usr/bin/ld: i386 architecture of input file `bessj0.o' is incompatible with i386:x86-64 output 
/usr/bin/ld: i386 architecture of input file `bessj2.o' is incompatible with i386:x86-64 output 
/usr/bin/ld: i386 architecture of input file `caxcb.o' is incompatible with i386:x86-64 output 
/usr/bin/ld: i386 architecture of input file `cgemp.o' is incompatible with i386:x86-64 output 

然后我用-m32标志在这里计算器一个线程建议。我发现一些子程序具有32位体系结构,而一些具有64位体系结构。我现在得到错误的其他文件,如下所示:

gfortran -m32 -lm bessj.o bessj0.o bessj1.o bessj2.o caxcb.o cgemp.o cmemcpy.o four1.o gemp.o getdata.o qsbstab.o qsfftinv.o qshkpsv.o qshksh.o qskern.o qslayer.o qsmainC.o qsmatinv.o qsmatrix.o qsmoment.o qspsv.o qsqmodel.o qssh.o qssublay.o qswaveno.o qswvint.o wavelet.o -o qsmainC.0 
/usr/bin/ld: i386:x86-64 architecture of input file `bessj.o' is incompatible with i386 output 
/usr/bin/ld: i386:x86-64 architecture of input file `bessj1.o' is incompatible with i386 output 
/usr/bin/ld: i386:x86-64 architecture of input file `four1.o' is incompatible with i386 output 
/usr/bin/ld: i386:x86-64 architecture of input file `qsfftinv.o' is incompatible with i386 output 

有没有什么办法可以编译这段代码?有人可以建议吗?

+0

你是如何得到.o文件的?显示所有的命令,而不仅仅是最后一个。你需要从源代码编译。同时给我们提供有关您操作系统的详细信 –

+0

似乎.o文件被包含在源自身的目录中。我之前尝试过“干净”,但没有奏效。这一次我手动删除它们。当我删除这些.o文件时,它成功编译。谢谢。 –

回答

1

它看起来像你的一些.o文件是32位和一些64位。

请注意,第一个命令中报告为不兼容的文件与-m32中另一个命令中报告的文件不同。

一致地重新编译它们全部。

+0

你说得对。我通过删除.o文件重新编译。谢谢。 –