linker - MinGW 链接器找不到 MPICH2 库

标签 linker g++ mingw

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
    

    显然,链接器添加了一个 /而不是 \到我提供的目录名称(除非出于某种原因寻找 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错误。

    最佳答案

    海合会能够找到你的图书馆。否则会报告: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/

    相关文章:

    c - 某些 .c 文件的一个 header 会导致链接器错误

    linux - 指定符号放置的绝对地址

    c++ - 为什么链接库的顺序会导致运行时错误?

    qt - 使用windeployqt时为"Warning: Cannot find GCC installation directory. g++.exe must be in the path."

    c++ - mingw-w64 : slow sprintf in <cstdio>

    c++ - 与 dylib ld : library not found for -lcrt0. ocollect2 的静态链接:错误:ld 返回 1 退出状态

    c++ - 将 C++ 类及其派生类放在特定部分

    c++ - 使用 g++ 避免 C++ 程序中的小页面错误

    linux - 配置在 linux-64 上为 linux-64 构建 MinGW-64 的选项(最终针对 windows-64)

    windows - MinGW - 加载 .dll 后,应用程序以异常方式终止(完成后)