开发者社区> 问答> 正文

boost mpi使用时链接错误?报错

1,boost编译。

我通过查看网上的很多教程,终于把自己的boost mpi给编译成功了。我有两个win环境,一个是:编译器VS2012,mpi为openmpi1.6,boost库为1.53;另一个环境是:编译器vs2008,mpi为openmpi1.6.2,boost库为1.42.上述的两个环境编译的boost和mpi均成功了,成功生成了libboost_mpi-vc110-mt-1_53.lib,libboost_mpi-vc110-mt-gd-1_53.lib(第一个环境的热release,debug)。

2,使用boost mpi。

我拷贝了网上的一个boost mpi 的 hello world程序,工程配置都包含了相应的头文件和lib库, 例子如下:

#include <boost\mpi.hpp>
#include <iostream>
int main(int argc, char* argv[])
{
boost::mpi::environment env(argc, argv);
boost::mpi::communicator world;


std::cout<<argc<<std::endl;
std::cout<<argv[0]<<std::endl;
std::cout<<"hello world! from process"<<world.rank()<<std::endl;


return  0;
}

编译后出现链接错误,如下:

1>------ 已启动生成: 项目: testBoost1, 配置: Release Win32 ------
1>libboost_mpi-vc110-mt-1_53.lib(communicator.obj) : error LNK2001: 无法解析的外部符号 _ompi_mpi_comm_world
1>libboost_mpi-vc110-mt-1_53.lib(environment.obj) : error LNK2001: 无法解析的外部符号 _ompi_mpi_comm_world
1>libboost_mpi-vc110-mt-1_53.lib(communicator.obj) : error LNK2001: 无法解析的外部符号 _ompi_mpi_comm_null
1>libboost_mpi-vc110-mt-1_53.lib(communicator.obj) : error LNK2001: 无法解析的外部符号 _ompi_mpi_group_empty
1>libboost_mpi-vc110-mt-1_53.lib(group.obj) : error LNK2001: 无法解析的外部符号 _ompi_mpi_group_empty
1>libboost_mpi-vc110-mt-1_53.lib(communicator.obj) : error LNK2001: 无法解析的外部符号 _ompi_request_null
1>libboost_mpi-vc110-mt-1_53.lib(request.obj) : error LNK2001: 无法解析的外部符号 _ompi_request_null
1>libboost_mpi-vc110-mt-1_53.lib(communicator.obj) : error LNK2001: 无法解析的外部符号 _ompi_mpi_unsigned
1>libboost_mpi-vc110-mt-1_53.lib(point_to_point.obj) : error LNK2001: 无法解析的外部符号 _ompi_mpi_unsigned
1>libboost_mpi-vc110-mt-1_53.lib(communicator.obj) : error LNK2001: 无法解析的外部符号 _ompi_mpi_packed
1>libboost_mpi-vc110-mt-1_53.lib(point_to_point.obj) : error LNK2001: 无法解析的外部符号 _ompi_mpi_packed
1>libboost_mpi-vc110-mt-1_53.lib(communicator.obj) : error LNK2001: 无法解析的外部符号 _ompi_mpi_errors_return
1>libboost_mpi-vc110-mt-1_53.lib(environment.obj) : error LNK2001: 无法解析的外部符号 _ompi_mpi_errors_return
1>libboost_mpi-vc110-mt-1_53.lib(communicator.obj) : error LNK2001: 无法解析的外部符号 _ompi_mpi_info_null
1>libboost_mpi-vc110-mt-1_53.lib(point_to_point.obj) : error LNK2001: 无法解析的外部符号 _ompi_mpi_info_null
1>libboost_mpi-vc110-mt-1_53.lib(mpi_datatype_cache.obj) : error LNK2001: 无法解析的外部符号 _ompi_mpi_datatype_null
1>E:\Workspace\C++\testBoost1\Release\testBoost1.exe : fatal error LNK1120: 9 个无法解析的外部命令
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

问题:
我猜测这个无法解析的原因可能是我编译的lib有问题,但在编译boost及mpi时并未报错都成功了,所以我想问问大神和高人,小菜我的问题原因及解决办法如何?

跪请指点!!!

展开
收起
爱吃鱼的程序员 2020-06-22 20:33:29 708 0
2 条回答
写回答
取消 提交回答
  • 老哥,能问一下你是怎么包含boost和mpi库的吗? 我用的mpich还是会出现上述的错误,请问怎么解决? 谢谢了。

    2022-06-30 15:12:57
    赞同 展开评论 打赏
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    自己回答:我没能解决这个问题,但是我换了一种方式,不用openMPI了,改用了MPICH2就好了。如果有答复请联系nohackcc@gmail.com 能把你的编译脚本分享一下吗?我用VS2012
    bjam怎么指定MPI路径?

    2020-06-22 20:33:47
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载