2017-04-14 155 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文件重新編譯。謝謝。 –