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
有没有什么办法可以编译这段代码?有人可以建议吗?
你是如何得到.o文件的?显示所有的命令,而不仅仅是最后一个。你需要从源代码编译。同时给我们提供有关您操作系统的详细信 –
似乎.o文件被包含在源自身的目录中。我之前尝试过“干净”,但没有奏效。这一次我手动删除它们。当我删除这些.o文件时,它成功编译。谢谢。 –