Настройка Code::Blocks для компиляции MPI-программ с помощью MPICC.exe

Мне удалось, с некоторой помощью, компилировать и запускать программу MPI из командной строки в Windows. Сейчас я пытаюсь скомпилировать эту программу с моим IDE code::blocks, и она не работает.

Under Settings -> Compiler... -> Other Settings -> Advanced Options -> Command line macros Я удалил все ненужные флаги и оставил:

$compiler $file

Settings -> Compiler... -> Toolchain executables У меня просто есть обертка MPI mpicc.exe для C-программ и mpic++.exe для C++.

Когда я сейчас нажимаю на Build (Ctrl +F9) открывается небольшое всплывающее окно с указанием:

cl.exe - application error

код ошибки 0xc00000be

в окне журнала сборки кода:: блоки я получаю:

mpicc.exe C:\Entwicklung\src\mpi_prime.c
Skipping linking (no linker program set): C:\Entwicklung\src\mpi_prime.exe
Process terminated with status -1073741634 (1 minutes, 37 seconds) 0 errors, 0 warnings (1 minutes, 37 seconds)

И вот я опять застрял, осталось с несколькими вопросами?

  1. я должен держать обертку mpicc.exe?
  2. code:: blocks пытается всегда вызывать компоновщик и т. д. где я могу отключить это?
  3. Я хотел изменить свой компилятор с cl на gcc с самого начала. Стоит ли сначала это попробовать?

РЕДАКТИРОВАТЬ 1:

mpicc.exe /nologo /W3  /MD /Ox /DNDEBUG    /IC:\Entwicklung\CUDA\VS2012~1\VC\include /IC:\Entwicklung\CUDA\VS2012~1\VC\include  /c main.c /Foobj\Release\main.obj
link.exe /nologo /LIBPATH:C:\Entwicklung\CUDA\VS2012~1\VC\include /LIBPATH:C:\Entwicklung\CUDA\VS2012~1\VC\include  /out:bin\Release\mpi_test_projektarbeit.exe "..\..\..\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib\Kernel32.Lib" msvcrt.lib msvcprt.lib "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib\Kernel32.Lib"  obj\Release\main.obj   
Process terminated with status -1073741634 (0 minutes, 1 seconds)
0 errors, 0 warnings (0 minutes, 1 seconds)

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

РЕДАКТИРОВАТЬ 2:

Во-первых, он все еще не работает. Во-вторых, я считаю, что теперь я гораздо лучше понимаю, что происходит и что не так.

Пробуя разные вещи, я пытался использовать cl.exe напрямую, без оболочки mpicc.exe. Я выбрал Settings -> Compiler... -> Microsoft Visual C++ 2010Кодовые блоки предлагали мне. При попытке построить проект я получил точно такое же сообщение об ошибке (должен был дисциплинировать мой noScript, чтобы показать мне сообщение), как с mpicc.exe, mpicc.exe вызывает cl.exe в его mpicc-wrapper-data.txt манифест.

Так что с некоторой магией Google, я нашел на форуме codeblocks эту страницу, где у кого-то еще было точно такое же сообщение об ошибке. Они предложили добавить дополнительные PATH среды, что заставило меня задуматься. Прежде чем я побежал mpicc из командной строки мне пришлось бежать vcvarsall.bat во-первых, потому что я получил ошибку, mspdb110.dll скучал. Итак, я внимательно посмотрел на vcvarsall.bat который вызывал другой пакетный файл vcvars32.bat, В этот файл временно добавлены переменные PATH. Итак, я добавил

C:\Entwicklung\CUDA\VS 2012\Common7\IDE\

навсегда в мой путь, и mpicc.exe может быть вызван без какого-либо отсутствующего сообщения об ошибке DLL, но при попытке компиляции появляется с какой-то ошибкой компоновщика, не может найти advapi32.lib, Я буду смотреть на это глубже и, как только он запускается в командной строке без помощи vcvars32.bat Я попробую это от CB снова. Я надеюсь, что это вызывает все мои проблемы.

Есть еще одна вещь, которая немного смущает меня, ничего серьезного, но когда я удалил CB и установил его снова, CB мог"new" mpi настройка компилятора где-то сохранена. Я проверил мою папку установки: все файлы были удалены после удаления, поэтому я также удалил папку CB в USER\AppData\, Однако при установке CB заново настройки компилятора все еще присутствуют при запуске CB, спрашивая меня, хочу ли я их импортировать?!?

1 ответ

Решение

Это позволит вам создать 32-битный консольный проект "Hello world" в Code::Blocks (по крайней мере, 12.11) с помощью оболочки компилятора OpenMPI windows C mpicc.exe с установленной цепочкой инструментов MS Visual Studio 10 (или более поздней):

Я предполагаю:

  • Code:: Blocks обнаружил компилятор MS VC++10 и он указан в качестве доступного компилятора в меню " Настройки" -> " Компилятор" в раскрывающемся меню " Выбранный компилятор".

  • Вы настроили новый компилятор, скажем, mpi, для оболочки MPI, и это тот, в котором вы изменили расширенные настройки компилятора и другие вещи.

  • Вы установили OpenMPI в C:\Program Files (x86)\OpenMPI_v1.6.2-win32

Затем:

  • Для родного win32 построить вам нужно будет ссылку kernel32.lib и для этого вам потребуется обновленный Windows SDK, например http://msdn.microsoft.com/en-US/windows/desktop/bg162891

  • В IDE Code:: Blocks перейдите в Настройки -> Компилятор. Выберите mpi и удалите этот компилятор. (Мы начнем снова)

  • В раскрывающемся меню выберите Microsoft Visual Studio 2010; нажмите кнопку " Копировать" и снова вызовите новый компилятор mpi.

  • Во вкладке-меню перейдите к исполняемым файлам Toolchain и установите:

    • Каталог установки компилятора = <empty>
    • Компилятор C = "C:\Program Files (x86)\OpenMPI_v1.6.2-win32\bin\mpicc.exe"
    • Компилятор C++ = "C:\Program Files (x86)\OpenMPI_v1.6.2-win32\bin\mpicc.exe"
    • Оставьте остальные настройки в исполняемых файлах Toolchain как есть и все в порядке.
  • Компилятору потребуется доступ к заголовкам стандартной библиотеки C (как минимум), а также пути поиска без пробелов (DOS). Так что теперь перейдите на вкладку Поиск каталогов -> Компилятор, где вы увидите C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include,

  • Выберите этот путь; нажмите Редактировать и замените его версией DOS того же самого, C:\PROGRA~2\MICROS~1.0\VC\include,

  • ОК из настроек компилятора.

Далее настройте проект.

  • Перейдите Файл -> Новый -> Проект. Нажмите значок консольного приложения.

  • Нажмите через мастера:

    • Установить язык = C

    • Выберите название проекта и местоположение

    • Установить компилятор = mpi

    • Конец

Code:: Blocks затем выдаст предупреждение о невозможности найти исполняемый файл компилятора в ваших настроенных путях поиска для mpi (и будет делать то же самое, когда вы посещаете параметры сборки проекта). Это ложная тревога.

  • разместить kernel32.lib под вашей установкой SDK и получите его путь, скажите: "C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86\kernel32.lib"

  • Перейдите в Настройки -> Проект -> Параметры сборки и выберите Compiler = mpi

  • Во вкладке-меню вкладка " Настройки компоновщика"

  • Нажмите Добавить под списком библиотек ссылок. Добавьте полное имя в кавычках, для которого вы отметили kernel32.lib и ОК из вариантов сборки.

  • Постройте проект. Журнал успешной сборки должен выглядеть так:

    -------------- Build: Debug in mpi_test (compiler: mpi)---------------
    
    "C:\Program Files (x86)\OpenMPI_v1.6.2-win32\bin\mpicc.exe" /nologo /W3  /MDd /Zi /D_DEBUG    /IC:\PROGRA~2\MICROS~1.0\VC\include  /c main.c /Foobj\Debug\main.obj
    main.c
    link.exe /nologo /LIBPATH:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib"  /out:bin\Debug\mpi_test.exe msvcrtd.lib msvcprtd.lib "C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86\kernel32.lib"  obj\Debug\main.obj   /DEBUG 
    LINK : bin\Debug\mpi_test.exe not found or not built by the last incremental link; performing full link
    Output size is 17.50 KB
    Process terminated with status 0 (0 minutes, 0 seconds)
    0 errors, 0 warnings (0 minutes, 0 seconds)
    

Оттуда вы можете перейти к какому-то реальному проекту MPI, для которого вам, конечно, нужно будет настроить дополнительные каталоги поиска и опции связывания.

ОБНОВЛЕНИЕ 1:

Некоторые проблемы, которые я вижу с вашим последним неудачным журналом сборки:

  • Компилятор вызывается как mpicc.exe, но согласно моему ответу его следует вызывать по полному пути, например "C:\Program Files (x86)\OpenMPI_v1.6.2-win32\bin\mpicc.exe", Можете ли вы прикрепить скриншот вкладки исполняемых файлов?

  • Опция компилятора /IC:\Entwicklung\CUDA\VS2012~1\VC\include появляется дважды. Это говорит о том, что вы настроили эту опцию глобально для mpi компилятор, а также для проекта. Просто настройте его для проекта.

  • Опция компоновщика /LIBPATH:C:\Entwicklung\CUDA\VS2012~1\VC\include также появляется дважды, вероятно, по той же причине. Но /LIBPATH: должен указывать на каталог, содержащий двоичные файлы библиотеки (.lib) и вы указываете на то же место, что и ваш CUDA заголовочные файлы - /IC:\Entwicklung\CUDA\VS2012~1\VC\include

  • kernel32.lib в связи дважды, сначала с относительным путем "..\..\..\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib\Kernel32.Lib", который может быть недействительным, а затем с абсолютным путем "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib\Kernel32.Lib", Опять же, это, вероятно, является результатом сочетания избыточной или неправильной глобальной конфигурации компилятора с конфигурацией проекта.

Призываю вас заставить компилятор mpi работать для стандартного консольного приложения "Hello World", выполнив шаги, которые я дал, затем перейти к элементарному приложению MPI и заставить его работать, ограничивая дополнительную конфигурацию, которая вам скорее понадобится для проекта чем компилятор

Другие вопросы по тегам