助推池:我能从升力系统中断开吗?

bma*_*ies 2 c++ boost

pool1.53.0中的文档声称它是"仅标题".但是,最小程序:

#include <boost/pool/pool_alloc.hpp>

int main() {
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

最终得到未定义的符号boost_system,并bcp认为这boost_system是必需的.有#define什么可以解决这个问题吗?

ken*_*ytm 5

这是一个已知的错误.https://svn.boost.org/trac/boost/ticket/7085.

  • 如果您不需要多线程,我们可以修改pool/detail/mutex.hpp包括<boost/thread/mutex.hpp>URL中所描述的,

    ...
    #if defined(BOOST_HAS_THREADS) && !defined(BOOST_NO_MT) && !defined(BOOST_POOL_NO_MT) 
    #include <boost/thread/mutex.hpp>
    #endif
    ...
    
    Run Code Online (Sandbox Code Playgroud)
  • 或者,如果您无法修改文件,请伪造<boost/thread/mutex.hpp>已定义的编译器:

    #define BOOST_POOL_NO_MT       // disable multi-threading
    #define BOOST_THREAD_MUTEX_HPP // define the #include-guard to disable the header
    
    #include <boost/pool/pool_alloc.hpp>
    
    int main () {}
    
    Run Code Online (Sandbox Code Playgroud)
  • 或者,如果您确实需要多线程,但允许使用C++ 11,我们可以使用std::mutex替换boost::mutex:

    #define BOOST_THREAD_MUTEX_HPP
    #include <mutex>
    namespace boost {
        using std::mutex;
    }
    
    #include <boost/pool/pool_alloc.hpp>
    
    int main () {}
    
    Run Code Online (Sandbox Code Playgroud)