2

1.53.0 中的文档pool声称它是“仅标题”。但是,一个最小的程序:

#include <boost/pool/pool_alloc.hpp>

int main() {
  return 0;
}

以未定义的符号结尾boost_system,并bcp认为这boost_system是必需的。有#define什么办法可以治愈吗?

4

1 回答 1

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
    ...
    
  • 或者,如果您无法修改文件,请伪造<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 () {}
    
  • 或者,如果您确实需要多线程,但允许使用 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 () {}
    
于 2013-06-08T14:49:08.427 回答