Visual Studio не может найти библиотеку MPI - PullRequest
0 голосов
/ 14 мая 2019

------------------ ОБНОВЛЕНИЕ 5/20/2019 ---------------- -

Следуя предложению Жиля Гуаилладе, я скомпилировал свой код на Фортране с параметром / NODEFAULTLIB. Теперь я получаю меньше сообщений об ошибках:


Ошибка 1, ошибка LNK2019: неразрешенный внешний символ __intel_new_feature_proc_init, на который ссылается функция MAIN__Test.obj

Ошибка 2, ошибка LNK2019: неразрешенный внешний символ for_set_reentrancy, указанный в функции MAIN__ Test.obj

Ошибка 3, ошибка LNK2019: неразрешенный внешний символ for_write_seq_lis указан в функции MAIN__ Test.obj

Ошибка 4, ошибка LNK2001: неразрешенный внешний символ mainCRTStartup LINK

Ошибка 5, ошибка LNK2001: неразрешенный внешний символ _fltused msmpifmc.lib (mpifbind.obj)

Ошибка 6: фатальная ошибка LNK1120: 5 неразрешенных внешних ссылок x64 \ Release \ Hello.exe


Спасибо.

------------------ ОБНОВЛЕНИЕ 5/17/2019 ---------------- -

Так что это ответ на комментарий Жиля Гуаилларда. Это только обновление к моему первоначальному вопросу, а не ответ.

Мой код:


  program mpisimple

  implicit none

  integer ierr

  include 'mpif.h'

  call mpi_init(ierr)

  !     print message to screen

  write(6,*) 'Hello World!'

  call mpi_finalize(ierr)

  end

Напомню, что я использую Visual Studio 2012 и скачал Microsoft-MPI v.10.0.

Следующие каталоги были добавлены на вкладку «Дополнительные включаемые каталоги» для Fortran:

C: \ Program Files (x86) \ Microsoft SDK \ MPI \ Include \ x64

C: \ Program Files (x86) \ Microsoft SDK \ MPI \ Include

Следующие каталоги были добавлены в «Дополнительные каталоги библиотек» для вкладки компоновщика:

C: \ Program Files (x86) \ Microsoft SDKs \ MPI \ Lib \ x64

Эти два файла были добавлены в качестве дополнительных зависимостей: "msmpifmc.lib" "msmpi.lib" <- я тоже пробовал без кавычек. </p>

Теперь я получаю разные ошибки, которые связаны с вещами, уже определенными в другом месте:


Ошибка 1, ошибка LNK2005: __crtSetUnhandledExceptionFilter уже определен в MSVCRT.lib (MSVCR110.dll) LIBCMT.lib (winapisupp.obj)
Ошибка 2 ошибка LNK2005: _calloc_crt уже определен в MSVCRT.lib (MSVCR110.dll) LIBCMT.lib (crtheap.obj) Ошибка 3 ошибка LNK2005: _amsg_exit уже определен в MSVCRT.lib (MSVCR110.dll) LIBCMT.lib (crt0dat.obj) Ошибка 4 ошибка LNK2005: _cexit уже определен в MSVCRT.lib (MSVCR110.dll) LIBCMT.lib (crt0dat.obj) Ошибка 5 ошибка LNK2005: _exit уже определен в MSVCRT.lib (MSVCR110.dll) LIBCMT.lib (crt0dat.obj) Ошибка 6 ошибка LNK2005: _initterm_e уже определено в MSVCRT.lib (MSVCR110.dll) LIBCMT.lib (crt0dat.obj) Ошибка 7 ошибка LNK2005: выход уже определен в MSVCRT.lib (MSVCR110.dll) LIBCMT.lib (crt0dat.obj) Ошибка 8 ошибка LNK2005: _lock уже определен в MSVCRT.lib (MSVCR110.dll) LIBCMT.lib (mlock.obj)
Ошибка 9 Ошибка LNK2005: _unlock уже определен в MSVCRT.lib (MSVCR110.dll) LIBCMT.lib (mlock.obj)
Ошибка 10 Ошибка LNK2005: _XcptFilter уже определен в MSVCRT.lib (MSVCR110.dll) LIBCMT.lib (winxfltr.obj)
Ошибка 11 ошибка LNK2005: _configthreadlocale уже определен в MSVCRT.lib (MSVCR110.dll) LIBCMT.lib (wsetloca.obj)
Ошибка 12, ошибка LNK2005: «void __cdecl terminate (void)» (? Terminate @@ YAXXZ) уже определен в MSVCRT.lib (MSVCR110.dll) LIBCMT.lib (hooks.obj)
Ошибка 13 ошибка LNK2005: __xi_a уже определено в MSVCRT.lib (cinitexe.obj) LIBCMT.lib (crt0init.obj)
Ошибка 14, ошибка LNK2005: __xi_z уже определено в MSVCRT.lib (cinitexe.obj) LIBCMT.lib (crt0init.obj)
Ошибка 15 Ошибка LNK2005: __xc_a уже определено в MSVCRT.lib (cinitexe.obj) LIBCMT.lib (crt0init.obj)
Ошибка 16, ошибка LNK2005: __xc_z уже определен в MSVCRT.lib (cinitexe.obj) LIBCMT.lib (crt0init.obj)
Ошибка 17 ошибка LNK2005: __set_app_type уже определен в MSVCRT.lib (MSVCR110.dll) LIBCMT.lib (errmode.obj) Предупреждение 18 предупреждение LNK4098: defaultlib 'MSVCRT' конфликтует с использованием других библиотек; использовать / NODEFAULTLIB: библиотека LINK
Предупреждение 19 предупреждение LNK4098: defaultlib 'LIBCMT' конфликтует с использованием других библиотек; использовать / NODEFAULTLIB: библиотека LINK
Ошибка 20: фатальная ошибка LNK1169: найден один или несколько кратно определенных символов x64 \ Release \ Hello.exe


Спасибо всем за помощь!


------------------ ОРИГИНАЛЬНЫЙ ПОЧТА ------------------

Я пытался скомпилировать код на Фортране, который использует MPI, но я продолжаю получать ошибки "неразрешенный внешний символ", связанные с MPI. Как правильно связать библиотеки MPI?

Я использую компилятор Intel с Visual Studio, а MPI предоставляется Microsoft MPI. Сообщения об ошибках:


Ошибка 1, ошибка LNK2019: неразрешенный внешний символ MPI_INIT, на который ссылается функция MAIN__ ex5f.obj
Ошибка 2 ошибка LNK2019: неразрешенный внешний символ MPI_COMM_RANK, указанный в функции MAIN__ ex5f.obj
Ошибка 3, ошибка LNK2019: неразрешенный внешний символ MPI_COMM_SIZE, на который ссылается функция MAIN__ ex5f.obj
Ошибка 4, ошибка LNK2019: неразрешенный внешний символ HYPRE_IJMATRIXCREATE, на который ссылается функция MAIN__ ex5f.obj
Ошибка 5, ошибка LNK2019: неразрешенный внешний символ HYPRE_IJMATRIXSETOBJECTTYPE, на который ссылается функция MAIN__ ex5f.obj
Ошибка 6, ошибка LNK2019: неразрешенный внешний символ HYPRE_IJMATRIXINITIALIZE, на который ссылается функция MAIN__ ex5f.obj
Ошибка 7, ошибка LNK2019: неразрешенный внешний символ HYPRE_IJMATRIXSETVALUES, на который ссылается функция MAIN__ ex5f.obj
Ошибка 8, ошибка LNK2019: неразрешенный внешний символ HYPRE_IJMATRIXASSEMBLE, на который ссылается функция MAIN__ ex5f.obj
Ошибка 9, ошибка LNK2019: неразрешенный внешний символ HYPRE_IJMATRIXGETOBJECT, на который ссылается функция MAIN__ ex5f.obj
Ошибка 10, ошибка LNK2019: неразрешенный внешний символ HYPRE_IJVECTORCREATE, на который ссылается функция MAIN__ ex5f.obj
Ошибка 11, ошибка LNK2019: неразрешенный внешний символ HYPRE_IJVECTORSETOBJECTTYPE, на который ссылается функция MAIN__ ex5f.obj
Ошибка 12, ошибка LNK2019: неразрешенный внешний символ HYPRE_IJVECTORINITIALIZE, на который ссылается функция MAIN__ ex5f.obj
Ошибка 13, ошибка LNK2019: неразрешенный внешний символ HYPRE_IJVECTORSETVALUES, на который ссылается функция MAIN__ ex5f.obj
Ошибка 14, ошибка LNK2019: неразрешенный внешний символ HYPRE_IJVECTORASSEMBLE, на который ссылается функция MAIN__ ex5f.obj
Ошибка 15, ошибка LNK2019: неразрешенный внешний символ HYPRE_IJVECTORGETOBJECT, на который ссылается функция MAIN__ ex5f.obj
Ошибка 16, ошибка LNK2019: неразрешенный внешний символ HYPRE_BOOMERAMGCREATE, на который ссылается функция MAIN__ ex5f.obj
Ошибка 17, ошибка LNK2019: неразрешенный внешний символ HYPRE_BOOMERAMGSETPRINTLEVEL, на который ссылается функция MAIN__ ex5f.obj
Ошибка 18, ошибка LNK2019: неразрешенный внешний символ HYPRE_BOOMERAMGSETOLDDEFAULT, на который ссылается функция MAIN__ ex5f.obj
Ошибка 19, ошибка LNK2019: неразрешенный внешний символ HYPRE_BOOMERAMGSETRELAXTYPE, на который ссылается функция MAIN__ ex5f.obj
Ошибка 20, ошибка LNK2019: неразрешенный внешний символ HYPRE_BOOMERAMGSETRELAXORDER, на который ссылается функция MAIN__ ex5f.obj
Ошибка 21 ошибка LNK2019: неразрешенный внешний символ HYPRE_BOOMERAMGSETNUMSWEEPS, на который ссылается функция MAIN__ ex5f.obj
Ошибка 22, ошибка LNK2019: неразрешенный внешний символ HYPRE_BOOMERAMGSETMAXLEVELS, на который есть ссылка в функции MAIN__ ex5f.obj
Ошибка 23, ошибка LNK2019: неразрешенный внешний символ HYPRE_BOOMERAMGSETTOL, на который ссылается функция MAIN__ ex5f.obj
Ошибка 24, ошибка LNK2019: неразрешенный внешний символ HYPRE_BOOMERAMGSETUP, на который ссылается функция MAIN__ ex5f.obj
Ошибка 25 Ошибки LNK2019: неразрешенный внешний символ HYPRE_BOOMERAMGSOLVE ссылки в функции MAIN__ ex5f.obj
Ошибка 26 ошибок LNK2019: неразрешенный внешний символ HYPRE_BOOMERAMGGETNUMITERATIONS, указанный в функции MAIN__ ex5f.obj
Ошибка 27 ошибки LNK2019: неразрешенный внешний символ HYPRE_BOOMERAMGGETFINALRELTVRES ссылка в функцииMAIN__ ex5f.obj
Ошибка 28, ошибка LNK2019: неразрешенный внешний символ HYPRE_BOOMERAMGDESTROY, на который ссылается функция MAIN__ ex5f.obj
Ошибка 29, ошибка LNK2019: неразрешенный внешний символ HYPRE_IJMATRIXDESTROY, ссылка на ошибку 305 * * * LNK2010: ошибка 305 * L0K: ссылка на L0K: ошибка 295: ссылка на LENK2010: ошибка L0KN * 306: ссылка на L6K: ошибка 285 из-за ошибки в LINK2010: L0K: ссылка на ошибку LNK2010: ошибка 306 * L06: ошибка LNK2016: в коде ошибки LINK2010: L0KN *, ошибка 306, ссылка на L6K: ошибка 295: ссылка на L0K: ошибка 295: не указана в функции MAIN.неразрешенный внешний символ HYPRE_IJVECTORDESTROY, на который ссылается функция MAIN__ ex5f.obj
Ошибка 31, ошибка LNK2019: неразрешенный внешний символ MPI_FINALIZE, на который ссылается функция MAIN__ ex5f.obj
ошибка 32, ошибка LNK2001: неразрешенный внешний символ MPI_DUP.jpgошибка LNK2001: неразрешенный внешний символ MPI_NULL_DELETE_FN ex5f.obj
EОшибка 34 Ошибка LNK2001: неразрешенный внешний символ MPI_NULL_COPY_FN ex5f.obj
Ошибка 35 Ошибка LNK2001: неразрешенный внешний символ MPI_COMM_DUP_FN ex5f.obj
Ошибка 36 Ошибка LNK2001: неразрешенная внешняя ошибка MPI_COMMFN_LB_NF_LF_NF_NF_LF_NF_LF_NF_LF_NF_LF_NF_RF_NF_RF_RF_RF_RF_RF_RF_RF_RU_NF_RU_RU_RU_RU_RU_RU_RU_RU_RU_RU_NOB_RUнеразрешенный внешний символ MPI_COMM_NULL_COPY_FN ex5f.obj
ошибка 38 ошибка LNK2001: неразрешенный внешний символ MPI_WIN_DUP_FN ex5f.obj * +1115 * ошибка 39 ошибка LNK2001: неразрешенный внешний символ MPI_WIN_NULL_DELETE_FN ex5f.obj
ошибка 40 ошибка LNK2001: неразрешенный внешний символ MPI_WIN_NULL_COPY_FN ex5f.obj
Ошибка 41, ошибка LNK2001: неразрешенный внешний символ MPI_TYPE_DUP_FN ex5f.obj
Ошибка 42, ошибка LNK2001: неразрешенный внешний символ MPI_TYPE_NULL_DELETE_FN ex5f.obj
Ошибка 43, ошибка LNK2001: нерассмотренная_объектная_функция_N_FN_NF_FN_F_NF_NF_NF_FN_FN_FN_F_N_FN_F_N_F_N_F_N_F_N_F_N_F_N_F_N_F_N_F_N_F_N_F_N_F_N_F_F_N_F_N_F_F_N_F_N_F_N_F_N_F_N_F_NF * *.Ошибка 44, ошибка LNK2001: неразрешенный внешний символ MPI_CONVERSION_FN_NULL ex5f.obj
Ошибка 45, фатальная ошибка LNK1120: 44, неразрешенная внешняяs x64 \ Release \ Test_MPI.exe


В коде также используется библиотека Hypre, разработанная в Ливерморской национальной лаборатории им. Лоуренса (отсюда и неразрешенные внешние символы, начинающиеся с "HYPRE_").Когда я впервые столкнулся с этой проблемой, я подумал, что это связано с искажением имени файла.Однако, когда меня спросили разработчики библиотеки Hypre, я получил ответ:

«Это проблемы MPI, которые не имеют никакого отношения к искажению имен в hypre (насколько я вижу). HypreБиблиотека ищет подпрограммы C MPI, в то время как ваша основная программа ищет подпрограммы Fortran MPI, но не находит ни одной. Я предполагаю, что у вас, вероятно, нет библиотеки MPI в строке ссылок. Вы можете попробовать поискать на некоторых форумах.которые обсуждают, как использовать MPI с Visual Studio. "

Я пробовал несколько комбинаций путей к каталогам для" Дополнительные включаемые каталоги "и" Дополнительные каталоги библиотек "в Visual Studio, но это не помогло.Связанные пути:

C: \ Program Files (x86) \ Microsoft SDKs \ MPI \ Include

C: \ Program Files (x86) \ Microsoft SDKs \ MPI \ Include \ x64

C: \ Program Files (x86) \ Microsoft SDK \ MPI \ Lib \

C: \ Program Files (x86) \ Microsoft SDK \ MPI \ Lib \ x64

Я должен отметить, что код, который я пытался скомпилировать, на самом деле является примером файла, включенного в дистрибутив библиотеки Hypre, и поэтому я сомневаюсь, что проблема связана с любой ошибкой кодирования.Тем не менее, на случай, если это поможет.код начинается с

программы ex5f

неявного none *

include 'mpif.h'

Все, что я пытаюсь сделать, - это скомпилировать код.Я обнаружил, что в прошлых постах обсуждались похожие проблемы, но они не были на 100% актуальны для моей проблемы.Ваша помощь и время будут высоко оценены.Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...