MPICH2 安装在 C:\Program Files\MPICH2 中。有两个子目录(感兴趣),包含 .h 文件的 \include
和包含 .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
这给了我代码中每个 MPI 符号上的一大堆
undefined reference
错误。我花了几个小时试图修复它,在 -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
显然,链接器向我提供的目录名称添加了
/
而不是 \
(除非出于某种原因寻找 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
错误。 最佳答案
GCC 能够 找到您的库。否则它会报告: cannot find -lmpi
。
不知何故,在该库中找不到 例程。我设法用这种语法编译了一个例子:g++ -I../include cpilog.c ../lib/mpi.lib ../lib/mpe.lib
不过我是在 msys 里面做的。而且我的目录不包含空格。
删除 libmpi.a
文件后,这也有效:g++ -I../include -L../lib cpilog.c -lmpi -lmpe
关于linker - MinGW 链接器找不到 MPICH2 库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1347424/