fw06412 2014-11-03 07:45 采纳率: 0%
浏览 3501

linux 下使用boost serialization库,编译问题

在linux下使用boost serialization,结果编译不过,折腾了半天也过不去,求大神指导
代码如下,也是网上找的,
#include "boost/serialization/serialization.hpp"
#include "boost/archive/binary_oarchive.hpp"
#include "boost/archive/binary_iarchive.hpp"
#include "boost/serialization/vector.hpp"
#include "boost/serialization/export.hpp"
#include "boost/serialization/extended_type_info_typeid.hpp"
#include "boost/serialization/extended_type_info.hpp"
#include
#include

using namespace std;
using namespace boost::serialization;
typedef struct Demo{
int a;
string s;
vector v;
} Demo;

class CMyData{
private:
friend class boost::serialization::access;

template<class Archive>
void serialize(Archive& ar, const unsigned int version) {
  ar & d.a;
  ar & d.s;
  ar & d.v[0];
}

public:
Demo d;
};

int main(){
string content;
{
string s="helloworld";
CMyData mydata ;
mydata.d.a = 100;
mydata.d.s = s;
mydata.d.v.push_back(5000);

std::ostringstream os;
boost::archive::binary_oarchive oa(os);
oa << mydata;
content = os.str();

}

{
CMyData mydata;
std::istringstream is(content);
boost::archive::binary_iarchive ia(is);
ia >> mydata;
cout<<mydata.d.a<<mydata.d.s<<mydata.d.v[0];
}
return 0;
}
编译命令: g++ -o test boostSerialization3.cpp -I/usr/include/boost -L/usr/lib/libboost_serialization.a boost库已经安装好了

编译结果:
/usr/include/boost/archive/detail/oserializer.hpp: In function ‘void boost::archive::save(Archive&, T&) [with Archive = boost::archive::binary_oarchive, T = CMyData]’:
/usr/include/boost/archive/basic_binary_oarchive.hpp:70: instantiated from ‘void boost::archive::basic_binary_oarchive::save_override(T&, int) [with T = CMyData, Archive = boost::archive::binary_oarchive]’
/usr/include/boost/archive/binary_oarchive.hpp:47: instantiated from ‘void boost::archive::binary_oarchive_impl::save_override(T&, int) [with T = CMyData, Archive = boost::archive::binary_oarchive]’
/usr/include/boost/archive/detail/interface_oarchive.hpp:78: instantiated from ‘Archive& boost::archive::detail::interface_oarchive::operator<<(T&) [with T = CMyData, Archive = boost::archive::binary_oarchive]’
boostSerialization.cpp:45: instantiated from here
/usr/include/boost/archive/detail/oserializer.hpp:567: error: invalid application of ‘sizeof’ to incomplete type ‘boost::STATIC_ASSERTION_FAILURE’
/usr/include/boost/archive/detail/iserializer.hpp: In constructor ‘boost::archive::detail::iserializer::iserializer() [with Archive = boost::archive::binary_iarchive, T = CMyData]’:
/usr/include/boost/archive/detail/iserializer.hpp:146: instantiated from ‘static boost::archive::detail::iserializer& boost::archive::detail::iserializer::instantiate() [with Archive = boost::archive::binary_iarchive, T = CMyData]’
/usr/include/boost/archive/detail/iserializer.hpp:375: instantiated from ‘static void boost::archive::detail::load_non_pointer_type::load_standard::invoke(Archive&, T&) [with Archive = boost::archive::binary_iarchive, T = CMyData]’
/usr/include/boost/archive/detail/iserializer.hpp:425: instantiated from ‘static void boost::archive::detail::load_non_pointer_type::invoke(Archive&, T&) [with Archive = boost::archive::binary_iarchive, T = CMyData]’
/usr/include/boost/archive/detail/iserializer.hpp:572: instantiated from ‘void boost::archive::load(Archive&, T&) [with Archive = boost::archive::binary_iarchive, T = CMyData]’
/usr/include/boost/archive/basic_binary_iarchive.hpp:70: instantiated from ‘void boost::archive::basic_binary_iarchive::load_override(T&, int) [with T = CMyData, Archive = boost::archive::binary_iarchive]’
/usr/include/boost/archive/binary_iarchive.hpp:47: instantiated from ‘void boost::archive::binary_iarchive_impl::load_override(T&, int) [with T = CMyData, Archive = boost::archive::binary_iarchive]’
/usr/include/boost/archive/detail/interface_iarchive.hpp:76: instantiated from ‘Archive& boost::archive::detail::interface_iarchive::operator>>(T&) [with T = CMyData, Archive = boost::archive::binary_iarchive]’
boostSerialization.cpp:53: instantiated from here
/usr/include/boost/archive/detail/iserializer.hpp:114: error: incomplete type ‘boost::serialization::extended_type_info_null’ used in nested name specifier
/usr/include/boost/archive/detail/oserializer.hpp: In constructor ‘boost::archive::detail::oserializer::oserializer() [with Archive = boost::archive::binary_oarchive, T = CMyData]’:
/usr/include/boost/archive/detail/oserializer.hpp:135: instantiated from ‘static boost::archive::detail::oserializer& boost::archive::detail::oserializer::instantiate() [with Archive = boost::archive::binary_oarchive, T = CMyData]’
/usr/include/boost/archive/detail/oserializer.hpp:264: instantiated from ‘static void boost::archive::detail::save_non_pointer_type::save_standard::invoke(Archive&, const T&) [with Archive = boost::archive::binary_oarchive, T = CMyData]’
/usr/include/boost/archive/detail/oserializer.hpp:322: instantiated from ‘static void boost::archive::detail::save_non_pointer_type::invoke(Archive&, const T&) [with Archive = boost::archive::binary_oarchive, T = CMyData]’
/usr/include/boost/archive/detail/oserializer.hpp:536: instantiated from ‘void boost::archive::save(Archive&, const T&) [with Archive = boost::archive::binary_oarchive, T = CMyData]’
/usr/include/boost/archive/detail/oserializer.hpp:568: instantiated from ‘void boost::archive::save(Archive&, T&) [with Archive = boost::archive::binary_oarchive, T = CMyData]’
/usr/include/boost/archive/basic_binary_oarchive.hpp:70: instantiated from ‘void boost::archive::basic_binary_oarchive::save_override(T&, int) [with T = CMyData, Archive = boost::archive::binary_oarchive]’
/usr/include/boost/archive/binary_oarchive.hpp:47: instantiated from ‘void boost::archive::binary_oarchive_impl::save_override(T&, int) [with T = CMyData, Archive = boost::archive::binary_oarchive]’
/usr/include/boost/archive/detail/interface_oarchive.hpp:78: instantiated from ‘Archive& boost::archive::detail::interface_oarchive::operator<<(T&) [with T = CMyData, Archive = boost::archive::binary_oarchive]’
boostSerialization.cpp:45: instantiated from here
/usr/include/boost/archive/detail/oserializer.hpp:107: error: incomplete type ‘boost::serialization::extended_type_info_null’ used in nested name specifier
/usr/include/boost/archive/detail/oserializer.hpp: In member function ‘bool boost::archive::detail::oserializer::is_polymorphic() const [with Archive = boost::archive::binary_oarchive, T = CMyData]’:
boostSerialization.cpp:56: instantiated from here
/usr/include/boost/archive/detail/oserializer.hpp:131: error: invalid use of undefined type ‘struct boost::serialization::extended_type_info_null’
/usr/include/boost/serialization/type_info_implementation.hpp:26: error: declaration of ‘struct boost::serialization::extended_type_info_null’
/usr/include/boost/archive/detail/oserializer.hpp:132: error: invalid use of undefined type ‘struct boost::serialization::extended_type_info_null’
/usr/include/boost/serialization/type_info_implementation.hpp:26: error: declaration of ‘struct boost::serialization::extended_type_info_null’
/usr/include/boost/archive/detail/iserializer.hpp: In member function ‘bool boost::archive::detail::iserializer::is_polymorphic() const [with Archive = boost::archive::binary_iarchive, T = CMyData]’:
boostSerialization.cpp:56: instantiated from here
/usr/include/boost/archive/detail/iserializer.hpp:142: error: invalid use of undefined type ‘struct boost::serialization::extended_type_info_null’
/usr/include/boost/serialization/type_info_implementation.hpp:26: error: declaration of ‘struct boost::serialization::extended_type_info_null’
/usr/include/boost/archive/detail/iserializer.hpp:143: error: invalid use of undefined type ‘struct boost::serialization::extended_type_info_null’
/usr/include/boost/serialization/type_info_implementation.hpp:26: error: declaration of ‘struct boost::serialization::extended_type_info_null’

谁知道啥原因啊,求指导

  • 写回答

1条回答

  • 雨时滴答猿先晓 2019-08-23 19:03
    关注

    1.编译的时候没加上那些静态库: (下面这是所有的静态库)
    boost_atomic boost_chrono boost_container boost_context boost_coroutine boost_date_time boost_exception boost_filesystem boost_graph boost_iostreams boost_locale boost_log boost_log_setup boost_math_c99 boost_math_c99f boost_math_c99l boost_math_tr1 boost_math_tr1f boost_math_tr1l boost_prg_exec_monitor boost_program_options boost_random boost_regex boost_serialization boost_signals boost_system boost_test_exec_monitor boost_thread boost_timer boost_type_erasure boost_unit_test_framework boost_wave boost_wserialization pthread
    2.没有头文件#include以及#include和#include
    3.vector 定义的时候没有参数列表 应该为vector v
    4.我的boost头文件都是<>,你的是引号,我们的安装路径不同,这个不算是问题
    我在你的代码的基础上修改了这三点,然后可以成功编译
    以下为我成功编译的截图
    图片说明
    不过仍然会有俩个警告,无伤大雅。

    评论

报告相同问题?

悬赏问题

  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题