在64位Ubuntu 14.04上编译32位fortran程序

在64位Ubuntu 14.04上编译32位fortran程序,ubuntu,fortran,linker-errors,32bit-64bit,Ubuntu,Fortran,Linker Errors,32bit 64bit,我有一个32位fortran代码,需要在64位机器上编译。我研究发现这是可能的。我安装了gfortran multilib来编译它。但我有这样的错误: 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 qsma

我有一个32位fortran代码,需要在64位机器上编译。我研究发现这是可能的。我安装了gfortran multilib来编译它。但我有这样的错误:

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
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
然后我在stackoverflow中的一个线程中使用了-m32标志。我发现有些子程序有32位的体系结构,而有些子程序有64位的体系结构。其他文件现在出现错误,如下所示:

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
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

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

看起来您的.o文件有些是32位的,有些是64位的

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


一致地重新编译所有文件。

您是如何获得.o文件的?显示所有命令,而不仅仅是最后一个命令。您需要从源代码处编译。还请提供有关您的操作系统的详细信息。似乎.o文件是从源代码本身包含在目录中的。我以前试过“弄干净”,但没用。这次我手动删除了它们。当我删除这些.o文件时,它编译成功。谢谢,你说得对。我通过删除.o文件重新编译。非常感谢。