1.53.0 中 pool
的文档声称它是“仅 header ”。然而,一个最小的程序:
#include <boost/pool/pool_alloc.hpp>
int main() {
return 0;
}
最终得到来自 boost_system
的 undefined symbol ,并且 bcp
认为 boost_system
是必需的。有#define
或其他方法可以解决这个问题吗?
最佳答案
这是一个已知错误。 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 () {}
关于c++ - boost 池: can I wean it from boost system?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17000542/