我一直在使用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,但仍然看到相同的错误。
答案 0 :(得分:2)
是的,这看起来像是版本冲突。
请注意,由于这是关于access_control的实现细节的编译错误,因此很可能是由于不同的编译器标记/配置导致编译了不同的代码。即使所有包含以下内容,这也将是一个问题来自同一Boost版本。
特别是,代码的某些部分可能对目标平台进行了(不同的)假设。
答案 1 :(得分:1)
我发现这是定义的问题。 Microsoft代码定义了宏调用U(x)
,Boost代码使用U作为模板变量。在导入Microsoft代码标头之前添加#define _TURN_OFF_PLATFORM_STRING
之后,此问题已解决。