MPICH2 安装在 C:\Program Files\MPICH2 中。有两个子目录(感兴趣的),\include
一个包含 .h 文件,\lib
另一个包含 .lib 文件。
MPICH2 附带的自述文件有以下说明:
- 创建一个生成文件
- 添加
–I...mpich2\include
- 添加
–L...mpich2\lib
- 添加
–lmpi
- 为您的源文件添加规则
- 编译
由于我的项目中没有其他规则,所以我没有创建makefile,我只是进入命令行并尝试像这样编译:
g++ -I"C:\Program Files\MPICH2\include" main.cpp -L"C:\Program Files\MPICH2\lib" -lmpi
undefined reference
这给了我代码中每个 MPI 符号的一大堆错误。我花了几个小时试图修复它,杂耍-I
和-L
切换-l
,打乱参数的顺序,甚至将所有 .lib 文件复制到与我的源相同的目录中,但似乎没有任何效果。
需要什么样的巫术才能让这个东西链接起来?
编辑:我想我发现了问题:这是链接器在详细模式下输出的摘录(添加-Wl,--verbose
到编译命令):
attempt to open C:\Program Files\MPICH2\lib/libmingwex.dll.a failed
attempt to open C:\Program Files\MPICH2\lib/mingwex.dll.a failed
attempt to open C:\Program Files\MPICH2\lib/libmingwex.a failed
attempt to open C:\Program Files\MPICH2\lib/mingwex.lib failed
attempt to open C:\Program Files\MPICH2\lib/libmingwex.dll failed
attempt to open C:\Program Files\MPICH2\lib/mingwex.dll failed
attempt to open C:\Program Files\MPICH2\lib\libmingwex.a failed
显然,链接器将 a/
而不是 a添加\
到我提供给它的目录名称中(lib___.a
由于某种原因查找格式时除外),这显然不是有效路径。有没有办法告诉链接器使用反斜杠而不是斜杠?
这也引起了我的注意:
attempt to open /mingw/lib/libmingwex.a succeeded
所以我尝试像这样编译:
g++ -I"/Program Files/MPICH2/include" -L"/Program Files/MPICH2/lib" objManager.cpp ongom.cpp io.cpp main.cpp -lmpi -lcxx
但我仍然得到同样的undefined reference
错误。