设置 -> 编译器... -> 其他设置 -> 高级选项 -> 命令行宏
下,我删除了所有不必要的标志,只留下了:$compiler $file
。在设置 -> 编译器... -> 工具链可执行文件
下,我只有用于C程序的MPI包装器mpicc.exe
和用于C++的mpic++.exe
。当我点击Build
(Ctrl + F9)时,一个小弹窗会出现,显示:cl.exe - 应用程序错误
,错误代码为0xc00000be
。在code::blocks的构建日志窗口中,我得到了如下信息:
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:
我相信我已经按照应该的方式设置了一切,但是我仍然收到了错误代码弹窗。我会尝试调整它。如果没有任何效果,我将尝试重新安装code::blocks,也许这会有所帮助。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)
编辑2: 首先,它仍然无法运行。 其次,我相信我现在对发生了什么以及出了什么问题有了更好的理解。
通过尝试不同的事情,我尝试直接使用cl.exe而不是mpicc.exe包装器。我选择了codeblocks提供的“设置->编译器...->Microsoft Visual C++ 2010”。尝试构建项目时,我收到了与“mpicc.exe”完全相同的错误消息(必须让我的noScript向我显示消息)。mpicc.exe在其“mpicc-wrapper-data.txt”清单中调用cl.exe。
因此,通过一些谷歌魔法,我在codeblocks论坛上找到了这个页面,在那里其他人也遇到了完全相同的错误消息。他们的建议是添加额外的环境路径,这让我想到了什么。在从命令行运行mpicc之前,我必须先运行vcvarsall.bat,因为我收到了一个错误,指出缺少mspdb110.dll。因此,我仔细查看了vcvarsall.bat,它调用另一个批处理文件vcvars32.bat。该文件临时添加了PATH变量。因此,我永久添加了C:\ Entwicklung \ CUDA \ VS 2012 \ Common7 \ IDE \到我的PATH,并且mpicc.exe可以被调用而没有任何缺少DLL错误消息,但尝试编译会显示一些链接器错误无法找到advapi32.lib。我将深入研究它,只要它在命令行上运行而不需要vcvars32.bat的帮助,我就会再次尝试CB。我希望这是导致所有问题的原因。
还有一件事让我有点困惑,虽然不严重,但是当我卸载CB并重新安装它时,CB在某个地方保存了“新”的mpi编译器设置。我检查了我的安装文件夹:卸载后所有文件都已删除,因此我还删除了USER \ AppData下的CB文件夹。但是,在安装CB时,编译器设置仍然存在于CB启动时,询问我是否要导入它们?