Настройка 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)
И вот я опять застрял, осталось с несколькими вопросами?
- я должен держать обертку mpicc.exe?
- code:: blocks пытается всегда вызывать компоновщик и т. д. где я могу отключить это?
- Я хотел изменить свой компилятор с 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 и заставить его работать, ограничивая дополнительную конфигурацию, которая вам скорее понадобится для проекта чем компилятор