2014-01-18 299 views
2

我成功编译with some help,它在Windows上从命令行编译并运行MPI程序。现在我试图用我的IDE代码:: blocks来编译这个程序,并且它失败了。设置Code :: Blocks以使用MPICC.exe编译MPI程序

Under Settings -> Compiler... -> Other Settings -> Advanced Options -> Command line macros予移除所有不必要的标志和simly左:

$compiler $file

Settings -> Compiler... -> Toolchain executables我simly具有包装器MPI mpicc.exe对于C prgrams和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. 代码::块试图总是调用一个链接器等在哪里可以关闭?
  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,codeblocks提供给我。试图建立项目我收到了完全相同的error message(不得不约束我的noScript给我看消息),与mpicc.exe一样。 mpicc.exe在其mpicc-wrapper-data.txt宣言中调用cl.exe。

因此,有一些谷歌的魔法,我发现在codeblocks论坛this页,其中有人有完全相同的错误信息。他们的建议是添加额外的环境路径,这让我想到了。在我从命令行运行mpicc之前,我必须首先运行vcvarsall.bat,因为我得到一个错误,mspdb110.dll丢失。所以我仔细看了一下vcvarsall.bat,它调用另一批文件vcvars32.bat。该文件暂时添加了PATH变量。所以我添加

C:\发展协会\ CUDA \ VS 2012 \ Common7 \ IDE \

永远是我路上,和mpicc.exe可以在没有任何缺少DLL的错误信息被调用,而是试图编译,出现一些链接器错误无法找到advapi32.lib。我会深入研究它,只要在命令行上运行而没有vcvars32.bat的帮助,我会再次从CB尝试它。我希望这是我所有的问题。

还有一件事让我困惑一点,没什么严重的,但是当我卸载CB并再次安装它时,CB可能会在编译器设置的某个地方保存。我检查了我的安装文件夹:所有文件在卸载后都被删除了,所以我也删除了USER\AppData\下的CB文件夹。然而,重新安装CB,CB启动时仍然存在的编译器设置,询问我是否要导入它们!!?

+0

您是否在使用OpenMPI 1.6.2(即上一个本机Windows版本)? –

+0

是的,正好OenMPI 1.6.2-win32 – aldr

回答

2

这将使您利用OpenMPI windows C编译器包装mpicc.exe和MS Visual Studio 10工具链,在Code :: Blocks(至少12.11)中构建一个32位的“Hello world”控制台项目 (或更高版本)安装:

我假定:

  • 代码::块已经检测到MS VC++ 10编译器,它是在设置列为可用编译 - >编译器下拉菜单选择编译

  • 你已经配置了一个新的编译器,让我们说,MPI,为MPI包装下,那就是 在其中您更改了先进的编译器设置和其他东西。

  • 您已经安装的openmpi在C:\Program Files (x86)\OpenMPI_v1.6.2-win32

然后:

  • 对于本机win32构建您将需要链接kernel32.lib,为此,你需要一个先进-date Windows SDK,例如http://msdn.microsoft.com/en-US/windows/desktop/bg162891

  • 在代码::块IDE,导航设置 - >编译。选择mpi并删除该编译器。 (我们将重新开始)

  • 从下拉菜单中选择Microsoft Visual Studio 2010;点击复制并再次调用 新编译器mpi

  • 在选项卡菜单,选项卡工具链的可执行文件并设置:

    • 编译器的安装目录 = <empty>
    • C编译器 =“C:\ Program Files文件(86) \ OpenMPI_v1.6.2-win32 \ bin \ mpicc.exe“
    • C++编译器 =”C:\ Program Files文件(x86)\ OpenMPI_v1.6.2-win32 \ bin \ mpicc.ex e“
    • 将其他设置保留在工具链可执行文件原样并确定。
  • 编译器将需要访问标准C库头文件(至少),将需要 自由空间(DOS)的搜索路径名。所以现在选项卡到搜索目录 - >编译器, 你会在哪里看到C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include

  • 选择此路径;点击编辑并用相同的DOS版本C:\PROGRA~2\MICROS~1.0\VC\include替换它。

  • 好的编译器设置

接下来设置该项目。

  • 导航文件 - > - >项目。点击控制台应用程序图标

  • 点击通过向导:

    • 设置语言 = Ç

    • 选择一个项目名称和位置

    • 设置编译器 = MPI

    • 完成

代码::那么块将弹出一个警告说在MPI您的配置 搜索路径无法找到编译器可执行文件(和只要你访问项目的构建选项,也会这样做)。这个 是虚惊一场。

  • 找到kernel32.lib你的SDK安装目录下,并得到其路径名,说:"C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86\kernel32.lib"

  • 导航设置 - >项目 - >构建选项并选择编译 = MPI

  • 在t AB-菜单,选项卡连接器设置

  • 点击添加链接库列表下方。添加完整的带引号的路径名,您注意到 为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"。你能附上工具链可执行文件选项卡的屏幕截图吗?编号出现两次。这表明您已经为该项目编制了mpi编译器,并为 全局配置了此选项。只需为项目配置它。

  • 链接器选项/LIBPATH:C:\Entwicklung\CUDA\VS2012~1\VC\include也出现两次,可能出于同样的原因。但是/LIBPATH:应指向包含 二进制库(.lib)的目录,你是在同一个地方作为你CUDA头指着它文件 -

  • 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应用程序,并得到它的工作, 限制的步骤程序您需要的项目需要的额外配置而不是编译器

+0

这是一个很好的答案,我相信我提出了所有建议的更改,但它不起作用。我编辑了我的原始文章,并尝试重新安装代码块。 – aldr

+0

更新了我原来的帖子并添加了新的信息 – aldr

相关问题