C ++ Boost-iostream:包含filtering_streambuf.hpp

时间:2018-06-30 23:00:36

标签: c++ boost boost-iostreams cpprest-sdk

我一直在使用boost iostream库(版本1.65),主要使用以下标头:<boost/iostreams/filtering_streambuf.hpp> ,没有问题。

在我的项目(https://github.com/Microsoft/cpprestsdk)中添加了另一个名为cpprest的库之后。我在cmake中收到此警告:

usr/bin/ld: warning: libboost_system.so.1.58.0, needed by /usr/lib/libcpprest.so, may conflict with libboost_system.so.1.65.0

在包含boost头文件之后,我还得到了这个神秘的编译错误:

/usr/local/include/boost/iostreams/detail/access_control.hpp: In constructor ‘boost::iostreams::detail::prot_<U>::prot_(V)’:
/usr/local/include/boost/iostreams/detail/access_control.hpp:37:43: error: class ‘boost::iostreams::detail::prot_<U>’ does not have any field named ‘v’
         template<typename V> prot_(V v) : U(v) { }

这是由Boost 1.58(由cpprest使用)和1.65的不兼容引起的吗?还是Boost iostream中的错误?

我实际上将提升幅度降为1.58,但仍然看到相同的错误。

2 个答案:

答案 0 :(得分:2)

是的,这看起来像是版本冲突。

请注意,由于这是关于access_control的实现细节的编译错误,因此很可能是由于不同的编译器标记/配置导致编译了不同的代码。即使所有包含以下内容,这也将是一个问题来自同一Boost版本。

特别是,代码的某些部分可能对目标平台进行了(不同的)假设。

答案 1 :(得分:1)

我发现这是定义的问题。 Microsoft代码定义了宏调用U(x),Boost代码使用U作为模板变量。在导入Microsoft代码标头之前添加#define _TURN_OFF_PLATFORM_STRING之后,此问题已解决。