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什么可以解决这个问题吗?
这是一个已知的错误.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)