不能在GCC下编译的可移植存档
portable archive not compiling under GCC
我需要在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)
不是对你问题的直接回答,但我在使用谷歌的协议缓冲区方面取得了很多成功。他们在内部使用它们并将它们开源:http://code.google.com/p/protobuf/
我用g++ 4.1.2构建,它工作得很好。我讨厌拥堵,很难看到发生了什么,而且速度慢得令人难以置信。有一个关于已弃用的标头的警告,由于它有一个已弃用的朋友声明的专用标记,我希望看到一些旧的东西,但是我没有。
你是用bjam构建的还是尝试把序列化放到你自己的目录中然后自己做?因为您的目录结构与包中的目录结构不完全相同
#define private public
应该消除访问私有成员时的第一个错误。这有点厚脸皮!但是在您更好地理解整个程序之前,它可以作为临时修复。
相关文章:
- C++Union/Struct位域的实现和可移植性
- 具有Qt事件循环的可移植通用共享库设置
- 没有执行策略的 std::transform_reduce 是可移植的吗?
- 如何在 c++ 中正确指定 #include 路径以使程序可移植
- 创建异构顶点数据数组的可移植方法
- FlatBuffers/Protobuf 中是否有支持任意 24 位有符号整数定义的可移植二进制序列化架构?
- 静态库可移植性
- 从非类型模板参数声明 constexpr 数组的可移植方法
- C++:Unicode 字符串文字的可移植性
- 如何使Visual Studio 2017 C++项目在计算机之间更具可移植性
- 尝试将 sfml 和 c++ 与 Windows 10 上的可移植 vscode 链接起来
- 是在同一体系结构上运行的静态编译的纯标准C 程序可移植
- 如何编写完全可移植的 4 字节字符常量的编译时初始化
- c++编译为可移植程序集
- 一种在编译时用C++根据printf格式检查参数的可移植方法
- 如何将C++编译成可移植的LLVM代码
- 检查表达式是否编译的可移植方法
- 可移植地编译整个目录
- Jamfile的可移植编译参数
- 不能在GCC下编译的可移植存档