2015-08-15 1 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

Eventual решения в комментариях скопированных к правильному ответу:

Вам нужно обертка специфичную для вас кластера, который будет заботиться о собственных библиотеках MPI для вас. Эти обертки часто называются mpif77, mpif90 и т. Д., На HPC Warwick, кажется, называется mpifort.

Смежные вопросы