\include
包含.h文件,\lib
包含.lib文件。随MPICH2一起提供的自述文件包含以下说明:
- 创建一个makefile
- 添加
–I...mpich2\include
- 添加
–L...mpich2\lib
- 添加
–lmpi
- 添加源文件规则
- 编译
g++ -I"C:\Program Files\MPICH2\include" main.cpp -L"C:\Program Files\MPICH2\lib" -lmpi
这导致每个MPI符号中的
undefined reference
错误,我在尝试修复它的过程中花了几个小时,围绕-I
,-L
和-l
开关,调整参数的顺序,甚至将所有.lib文件复制到与我的源代码相同的目录中,但似乎没有任何作用。需要什么样的巫术才能使这个东西链接起来?
编辑:我认为我找到了问题所在:这里是链接器详细模式下的输出摘录(在编译命令中添加
-W1,--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
显然,链接器在我提供的目录名称中添加了/
而不是\
(除了寻找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
错误。
C:\Users\Bansaghi\AppData\Local\Temp/ccIF61Uc.o:main.cpp:(.text+0x1615): undefined reference to 'MPI_Comm_rank'
。 - suszterpatt