2015-08-15 114 views
0

我知道很多人都問過類似的問題,但我找不到適合我的答案。我正在編譯並最終運行一個名爲zeus-mp的程序,該程序依賴於mpi庫。我只是簡單地按照代碼提供的說明進行操作,並編輯了make文件以反映我試圖運行它的系統。當我運行make all時,我得到以下輸出。ld:找不到-lmpif(即使庫已鏈接)

ifort -O2 -msse2 -I/usr/include/mpi -I/hpcwarwick/ompi/1.4.5/intel/12.1/include -o ../exe/zeusmp.x advx1.o advx2.o advx3.o avisc.o avisc_d.o bndyflgs.o bval3d.o bvalemf.o clocks.o ct.o dataio.o diverg.o empty.o findno.o forces.o forces_d.o fourn.o ggen.o grdv.o hdfall.o hsmoc.o intchk.o lorentz.o lorentz_d.o maxmin.o mnmx.o momx1.o momx2.o momx3.o movie.o msave2.o mget2.o mstart.o newdt.o newgrid.o newvg.o newx1.o newx2.o nudt.o pdv.o pdv_d.o pressure.o printd.o restart.o setup.o spenergy.o srcstep.o strtoi.o transprt.o tranx1.o tranx2.o tranx3.o tslice.o zeusmp.o writeout.o textdmp.o linpck.o debug.o rad_loss.o kin_visc.o tconduct.o modulo.o pnewt.o nantest.o box.o bcdflt.o checkin.o mmIsFinite.o mmIsNan.o -L/usr/lib64 - L/usr/lib/mpi/lib -L/hpcwarwick/ompi/1.4.5/intel/12.1/lib - L/storage/home/maths/marxzq/HDF4/hdf4lib/lib -ldl -lnsl -lutil -lmfhdf - ldf -lmpi -lmpif -lpthread 
ld: cannot find -lmpif 
make: *** [../exe/zeusmp.x] Error 1 

文件mpif.h是目錄/hpcwarwick/ompi/1.4.5/intel/12.1/include,我相信我已經正確連接。我甚至嘗試將mpif.h移動到運行make的目錄中,但也失敗並出現相同的錯誤。如果有人能幫助,我會非常感激,在此先感謝。在複製到正確的答案評論

+0

不要混淆編譯與鏈接。您正在告訴鏈接器查找並鏈接名爲libmpif的*庫*。這樣的圖書館是否存在? – talonmies

+1

加載器(或編譯器,如果你不太確定加載器是什麼)抱怨它無法找到它調用'lmpif'的庫,但是如果你在文件結構中找到它,它會有一個名稱像'libmpif.so'。但是你寫了一個名爲'mpif.h'的頭文件的存在。兩者不一樣 - 暗示你不瞭解其中的差異。請澄清。 –

+0

因此,根據我的理解,'* .h'文件是鏈接到'.../intel/12.1/lib'中正確的庫的頭文件?這是我認爲問題的原因,因爲沒有'libmpif.so',但是有一個'libmpi_f77.so'和一個'libmpi_f90.so'。我(可能天真地)認爲'mpif.h'會鏈接到這兩者之一,因爲它們都是fortran,並且沒有'mpi_f77.h'或'mpi_f90.h'。如果我在那裏錯了,請糾正我,我對此很新穎。 –

回答

1

最終解決:

你需要特定於集羣將照顧正確的MPI庫爲您的包裝。這些包裝通常被稱爲mpif77,mpif90等,在HPC沃裏克它似乎被稱爲mpifort