11

我需要(反)序列化 Windows 和 Linux 上的数据(并在两者之间传输文件)。我想使用可以在示例中找到的 Boost 序列化库的可移植二进制档案,例如参见http://boost-doc-zh.googlecode.com/svn-history/r380/trunk/libs/serialization/example /

这在 Windows (VS 2008) 上运行良好,但无法在 GCC 4.3.2 下编译并出现以下错误。

有人可以提出解决方案吗?

非常感谢!

/projects/lib/BOOST/1_44_0/include/boost/archive/basic_archive.hpp: In member function 'void portable_binary_iarchive::init(unsigned int)':
/projects/lib/BOOST/1_44_0/include/boost/archive/basic_archive.hpp:78: error: 'uint_least32_t boost::archive::version_type::t' is private
/home/myfolder/src/portable_binary_iarchive.cpp:92: error: within this context
/home/myfolder/src/portable_binary_iarchive.hpp: In member function 'void portable_binary_iarchive::load(T&) [with T = boost::archive::class_id_type]':
/projects/lib/BOOST/1_44_0/include/boost/archive/detail/iserializer.hpp:107:   instantiated from 'static void boost::archive::load_access::load_primitive(Archive&, T&) [with Archive = portable_binary_iarchive, T = boost::archive::class_id_type]'
/projects/lib/BOOST/1_44_0/include/boost/archive/detail/iserializer.hpp:356:   instantiated from 'static void boost::archive::detail::load_non_pointer_type<Archive>::load_primitive::invoke(Archive&, T&) [with T = boost::archive::class_id_type, Archive = portable_binary_iarchive]'
/projects/lib/BOOST/1_44_0/include/boost/archive/detail/iserializer.hpp:433:   instantiated from 'static void boost::archive::detail::load_non_pointer_type<Archive>::invoke(Archive&, T&) [with T = boost::archive::class_id_type, Archive = portable_binary_iarchive]'
/projects/lib/BOOST/1_44_0/include/boost/archive/detail/iserializer.hpp:586:   instantiated from 'void boost::archive::load(Archive&, T&) [with Archive = portable_binary_iarchive, T = boost::archive::class_id_type]'
/projects/lib/BOOST/1_44_0/include/boost/archive/detail/common_iarchive.hpp:66:   instantiated from 'void boost::archive::detail::common_iarchive<Archive>::load_override(T&, int) [with T = boost::archive::class_id_type, Archive = portable_binary_iarchive]'
/home/myfolder/src/portable_binary_iarchive.hpp:140:   instantiated from 'void portable_binary_iarchive::load_override(T&, int) [with T = boost::archive::class_id_type]'
/projects/lib/BOOST/1_44_0/include/boost/archive/detail/interface_iarchive.hpp:60:   instantiated from 'Archive& boost::archive::detail::interface_iarchive<Archive>::operator>>(T&) [with T = boost::archive::class_id_type, Archive = portable_binary_iarchive]'
/projects/lib/BOOST/1_44_0/include/boost/archive/detail/common_iarchive.hpp:51:   instantiated from 'void boost::archive::detail::common_iarchive<Archive>::vload(boost::archive::class_id_type&) [with Archive = portable_binary_iarchive]'
/home/myfolder/src/portable_binary_iarchive.cpp:128:   instantiated from here
/home/myfolder/src/portable_binary_iarchive.hpp:107: error: call of overloaded 'class_id_type(intmax_t&)' is ambiguous
/projects/lib/BOOST/1_44_0/include/boost/archive/basic_archive.hpp:118: note: candidates are: boost::archive::class_id_type::class_id_type(size_t)
/projects/lib/BOOST/1_44_0/include/boost/archive/basic_archive.hpp:115: note:                 boost::archive::class_id_type::class_id_type(int)
4

3 回答 3

1

不是真正直接回答您的问题,但我在 Google 的 Protocol Buffers 方面取得了很大成功。他们在内部使用它们并将它们开源:http ://code.google.com/p/protobuf/

于 2011-04-23T17:00:16.147 回答
0
#define private public

应该摆脱关于访问私有成员的第一个错误。这有点厚脸皮!但它可以作为临时修复,直到您更好地理解整个程序。

于 2011-05-23T02:35:49.230 回答
0

我用 g++ 4.1.2 构建,它工作正常。我讨厌 bjam,很难看到发生了什么,而且速度慢得令人难以置信。有一个关于已弃用标头的警告,并且由于它具有已弃用的朋友声明的专用标记,我希望看到一些旧的东西,但我没有。

您是使用 bjam 构建它还是尝试将序列化提取到您自己的目录中并自己做?因为您的目录结构与软件包中的目录结构不完全相同。

于 2011-05-19T20:18:21.883 回答