编译简单 boot_mpi 分散程序时出错:没有序列化元素

     2023-03-27     68

关键词:

【中文标题】编译简单 boot_mpi 分散程序时出错:没有序列化元素【英文标题】:Error during compiling of simple boot_mpi scatter program: no serialize element 【发布时间】:2021-01-09 14:19:45 【问题描述】:

我目前正在评估一个简单的程序,该程序允许将行/字符串的数组/向量分散到多个进程中。我创建了一个无法编译的简单测试程序。我希望有人可以帮助我找到解决方案。这是程序:

#include <boost/mpi.hpp>
#include <string>
#include <iostream>
#include <vector>

namespace mpi = boost::mpi;

int main(int argc, char* argv[])

  mpi::environment env(argc, argv);
  mpi::communicator world;

  std::vector< std::vector < std::string > > all (3, std::vector < std::string >());
  std::vector< std::string > mine;
  
  if (world.rank() == 0) 
    all[0].push_back("String1");
    all[0].push_back("String2");
    all[1].push_back("String3");
    all[1].push_back("String4");
    all[2].push_back("String5");
    all[2].push_back("String6");

  
  mpi::scatter(world, all, mine, 0);
  for (int r = 0; r < world.size(); ++r) 
    world.barrier();
    if (r == world.rank()) 
      std::cout << "Rank " << r << " got " << mine[0] << std::endl;
    
  
  return 0;

我尝试了以下两个命令来编译它:

mpic++ scatter_mini.cpp -o scatter_mpi -lboost_mpi
mpic++ scatter_mini.cpp -o scatter_mpi -lboost_mpi -lboost_serialization

两者都会导致相同的错误,我在这里给你一个简短的版本(德语抱歉):

/usr/include/boost/serialization/access.hpp: In Instanziierung von »static void boost::serialization::access::serialize(Archive&, T&, unsigned int) [with Archive = boost::mpi::packed_iarchive; T = std::vector<std::__cxx11::basic_string<char> >]«:
/usr/include/boost/serialization/serialization.hpp:68:22:   erfordert durch »void boost::serialization::serialize(Archive&, T&, unsigned int) [with Archive = boost::mpi::packed_iarchive; T = std::vector<std::__cxx11::basic_string<char> >]«
/usr/include/boost/serialization/serialization.hpp:118:14:   erfordert durch »void boost::serialization::serialize_adl(Archive&, T&, unsigned int) [with Archive = boost::mpi::packed_iarchive; T = std::vector<std::__cxx11::basic_string<char> >]«
/usr/include/boost/archive/detail/iserializer.hpp:187:40:   erfordert durch »void boost::archive::detail::iserializer<Archive, T>::load_object_data(boost::archive::detail::basic_iarchive&, void*, unsigned int) const [with Archive = boost::mpi::packed_iarchive; T = std::vector<std::__cxx11::basic_string<char> >]«
/usr/include/boost/archive/detail/iserializer.hpp:121:1:   erfordert durch »class boost::archive::detail::iserializer<boost::mpi::packed_iarchive, std::vector<std::__cxx11::basic_string<char> > >«
/usr/include/boost/archive/detail/iserializer.hpp:409:27:   erfordert durch »static void boost::archive::detail::load_non_pointer_type<Archive>::load_standard::invoke(Archive&, const T&) [with T = std::vector<std::__cxx11::basic_string<char> >; Archive = boost::mpi::packed_iarchive]«
/usr/include/boost/archive/detail/iserializer.hpp:461:22:   [ 5 Instanziierungskontexte werden übersprungen, »-ftemplate-backtrace-limit=0« zum Ausschalten verwenden ]
/usr/include/boost/archive/detail/interface_iarchive.hpp:68:36:   erfordert durch »Archive& boost::archive::detail::interface_iarchive<Archive>::operator>>(T&) [with T = std::vector<std::__cxx11::basic_string<char> >; Archive = boost::mpi::packed_iarchive]«
/usr/include/boost/mpi/collectives/scatter.hpp:124:14:   erfordert durch »void boost::mpi::detail::dispatch_scatter_sendbuf(const boost::mpi::communicator&, const buffer_type&, const std::vector<int>&, const T*, T*, int, int) [with T = std::vector<std::__cxx11::basic_string<char> >; boost::mpi::binary_buffer_oprimitive::buffer_type = std::vector<char, boost::mpi::allocator<char> >]«
/usr/include/boost/mpi/collectives/scatter.hpp:143:27:   erfordert durch »void boost::mpi::detail::scatter_impl(const boost::mpi::communicator&, const T*, T*, int, int, mpl_::false_) [with T = std::vector<std::__cxx11::basic_string<char> >; mpl_::false_ = mpl_::bool_<false>]«
/usr/include/boost/mpi/collectives/scatter.hpp:159:23:   erfordert durch »void boost::mpi::scatter(const boost::mpi::communicator&, const T*, T&, int) [with T = std::vector<std::__cxx11::basic_string<char> >]«
/usr/include/boost/mpi/collectives/scatter.hpp:168:27:   erfordert durch »void boost::mpi::scatter(const boost::mpi::communicator&, const std::vector<T>&, T&, int) [with T = std::vector<std::__cxx11::basic_string<char> >]«
scatter_mini.cpp:28:35:   von hier erfordert
/usr/include/boost/serialization/access.hpp:116:11: Fehler: »class std::vector<std::__cxx11::basic_string<char> >« hat kein Element namens »serialize«

我很确定我已经安装了所有必要的软件包,我还可以编译其他 boost mpi 程序,尤其是那些来自 boost mpi 教程/示例的程序。

【问题讨论】:

您可能缺少包含 &lt;boost/serialization/string.hpp&gt;&lt;boost/serialization/vector.hpp&gt; 标头。 是的,就是这样,谢谢... 我会把它写成答案,这样你就可以关闭这篇文章了。 (我之前不确定它是否能解决问题。) 【参考方案1】:

您的代码缺少必要的标头。尝试添加:

#include <boost/serialization/string.hpp>
#include <boost/serialization/vector.hpp>

【讨论】:

为 ARM 交叉编译应用程序时与 sdl 链接时出错

】为ARM交叉编译应用程序时与sdl链接时出错【英文标题】:errorlinkingwithsdlwhilecrosscompilingapplicationforARM【发布时间】:2011-02-2021:01:25【问题描述】:我正在尝试为ARM处理器交叉编译简单的SDL应用程序。我正在使用带有IntelXscalePX27xr... 查看详情

尝试编译二叉树程序时出错

】尝试编译二叉树程序时出错【英文标题】:errorwhentryingtocompilebinarytreeprogram【发布时间】:2014-04-0210:08:33【问题描述】:所以在这个项目中,我必须开发一个二叉表达式树,并使用该树将后缀表达式转换为中缀表达式。大部分... 查看详情

为啥交叉编译 Arm Linux GCC 时出错?

】为啥交叉编译ArmLinuxGCC时出错?【英文标题】:WhyerrorincrosscompilingArmLinuxGCC?为什么交叉编译ArmLinuxGCC时出错?【发布时间】:2012-02-1105:42:19【问题描述】:我正在尝试使用AppWeb,我编写了一个非常简单的程序来将AppWeb嵌入到我... 查看详情

运行可执行文件时编译着色器时出错

】运行可执行文件时编译着色器时出错【英文标题】:ErrorCompilingShaderwhenrunningexecutable【发布时间】:2020-08-0414:31:10【问题描述】:我的OpenGl代码在VisualStudio2019中以调试模式构建和运行,没有任何错误。当我从输出目录运行可执... 查看详情

链接 C++ 程序时出错

...【发布时间】:2013-02-2300:36:59【问题描述】:我正在尝试编译一些非常简单的C++代码,但每次尝试都会收到此错误:Undefinedsymbolsforarchitecturex86_64:"std::basic_ostream<char,std::char_traits<char>>::operator< 查看详情

编译应用程序时出错

】编译应用程序时出错【英文标题】:Errorwhilecompilingapp【发布时间】:2016-02-2706:54:51【问题描述】:错误:配置根项目“Myapp”时出现问题。无法解析配置\':classpath\'的所有依赖项。超时等待锁定工件缓存(C:\\Users\\prasid444.gradle\\c... 查看详情

升级引导程序后编译资产时出错

】升级引导程序后编译资产时出错【英文标题】:Errorcompilingassetsafterupgradingbootstrap【发布时间】:2021-09-0212:23:05【问题描述】:我正在尝试升级RubyonRails应用程序中的引导程序版本。使用纱线从4.0.0-alpha.6迁移到4.1后,运行railsass... 查看详情

使用 Address Sanitizer 编译程序时出错

】使用AddressSanitizer编译程序时出错【英文标题】:ErrorcompilingprogramwithAddressSanitizer【发布时间】:2017-01-3018:30:36【问题描述】:我正在尝试使用AddressSanitizer(ASan)编译程序(tarantool),但遇到以下错误:/home/tarantool/src/fiber.c:123:2:error... 查看详情

编译c++程序的内存分配代码时出错

】编译c++程序的内存分配代码时出错【英文标题】:goterrorwhilecompilingmemoryallocationcodeofc++program【发布时间】:2020-06-0707:48:37【问题描述】:我正在用C++编写内存分配程序,但程序出错。我不明白发生了什么。请帮忙。#include<ios... 查看详情

编译 GLEW/SDL 程序时出错

】编译GLEW/SDL程序时出错【英文标题】:GettingerrorswhencompilingGLEW/SDLprogram【发布时间】:2013-12-0712:52:09【问题描述】:我有这个代码:#include<iostream>#include<glew.h>#include<SDL.h>#pragmacomment(lib,"glew32.lib")#pragmacomment(lib 查看详情

编译 asp.NET 应用程序时出错

】编译asp.NET应用程序时出错【英文标题】:Errorwhilecompilingasp.NETapplication【发布时间】:2012-01-3115:12:29【问题描述】:当我编译我的asp.net应用程序时,我得到下面提到的错误。这个错误经常发生。我使用的语言是C#。内部编译器... 查看详情

在 prolog 中编译元程序时出错

】在prolog中编译元程序时出错【英文标题】:errorwhilecomplingthemetaprograminprolog【发布时间】:2012-03-0916:35:54【问题描述】:我正在尝试在ECLiPSeProlog中实现一个元程序,这是我编写的代码-:-dynamicgo/1.sol(true):-!.sol((A,B)):-!,sol(A),sol(B).so... 查看详情

使用 pyinstaller [eel] 编译应用程序时出错

】使用pyinstaller[eel]编译应用程序时出错【英文标题】:errorwhilecompilingapplicationwithpyinstaller[eel]【发布时间】:2021-12-1212:50:33【问题描述】:之前,当使用pyinstaller编译脚本时,一切都很好。我就是这样跑的。python-meelstat1.pyweb--onef... 查看详情

使用 gtkmm 编译 gtk 程序时出错

】使用gtkmm编译gtk程序时出错【英文标题】:Errorsincompilinggtkprogramwithgtkmm【发布时间】:2016-11-2505:10:23【问题描述】:我使用glade设计器制作了一个GUI,并将功能封装在一个类中。这是我编写的类定义:#ifndef_CLIPSWINDOW_H#define_CLIPSW... 查看详情

编译与 netcdf 关联的程序时 Dwarf 版本出错

】编译与netcdf关联的程序时Dwarf版本出错【英文标题】:ErrorwithDwarfversionwhencompileprogramassociatedwithnetcdf【发布时间】:2016-09-0809:01:33【问题描述】:我正在尝试编译一个作为化学排放预处理器的程序。这是其编译过程的官方教程... 查看详情

在 petalinux 中编译 gstreamer 应用程序时出错

】在petalinux中编译gstreamer应用程序时出错【英文标题】:Errorcompilinggstreamerappinpetalinux【发布时间】:2020-05-1303:17:19【问题描述】:我正在尝试使用以下头文件在petalinux中编译自定义gstreamer应用程序:#include<stdlib.h>#include<st... 查看详情

编译 Angular 11(从 Angular 9 升级)应用程序时出错

】编译Angular11(从Angular9升级)应用程序时出错【英文标题】:Errorincompilingangular11(upgradedfromangular9)application【发布时间】:2021-05-0205:49:36【问题描述】:我有一个Angular9应用程序,现在已升级到Angular11。现在在编译Angular应用程序... 查看详情

尝试在 Windows 上执行 C++ 时出错(通过 MinGW 编译)

】尝试在Windows上执行C++时出错(通过MinGW编译)【英文标题】:ErrortryingtoexecuteC++onWindows(compiledviaMinGW)【发布时间】:2020-01-2717:22:34【问题描述】:所以我第一次尝试编译并运行一个我做过的c++“应用程序”(试图为我的女朋友... 查看详情