Boost.Pool documentation说(强调我的):
Boost Pool库是一个仅限标题的库。这意味着有 没有.lib,.dll或.so来构建;只需将Boost目录添加到您的 编译器的包含文件路径,你应该好好去!
但是当我尝试在VS2010 SP1中编译这样的代码时:
#include <string>
#include <vector>
#include <boost\pool\pool_alloc.hpp>
int main()
{
typedef std::basic_string<wchar_t, std::char_traits<wchar_t>,
boost::pool_allocator<wchar_t>> PoolString;
std::vector<PoolString> vec;
for (int i = 0; i < 100; i++)
{
PoolString s(L"Some test string. ABCDEF.");
vec.push_back(s);
}
// Release pool memory
boost::singleton_pool<boost::pool_allocator_tag, sizeof(wchar_t)>::release_memory();
return 0;
}
我收到了链接器错误:
错误LNK1104:无法打开文件 'libboost_thread-VC100-MT-GD-1_49.lib'
Boost.Pool文档是否不正确? 我在这里错过了什么? 我怎样才能使用Boost.Pool?
答案 0 :(得分:2)
boost::singleton_pool
使用位于boost::thread
的默认互斥锁实现,该实施仅不标头。
有关如何删除依赖关系的信息,请参阅下面引用的singleton_pool header:
Mutex 此类是用于保护的互斥锁类型 同时访问底层池。可以是任何Boost.Thread 互斥类型或boost :: details :: pool :: null_mutex。它是 暴露,以便用户可以正常声明一些单身池(即, 与同步),但一些单独的池没有 同步(通过指定 出于效率原因,boost :: details :: pool :: null_mutex)。 成员typedef互斥体公开此模板的值 参数。此参数的默认值为 boost :: details :: pool :: default_mutex这是两者的同义词 boost :: details :: pool :: null_mutex(当线程支持是 在编译器中关闭(因此未设置BOOST_HAS_THREADS),或 线程支持已明确禁用 BOOST_DISABLE_THREADS(在线程范围内禁用线程)或 BOOST_POOL_NO_MT(仅限此库))或用于boost :: mutex (在编译器中启用了线程支持时)。
答案 1 :(得分:0)
在boost / config / user.hpp:261中有
//
// Turn threading support off if BOOST_DISABLE_THREADS is defined:
//
#if defined(BOOST_DISABLE_THREADS) && defined(BOOST_HAS_THREADS)
# undef BOOST_HAS_THREADS
#endif
我想如果你 #define BOOST_DISABLE_THREADS 包括它之前会解决它。 之后,您必须为您的用户管理此选项到您的构建系统中。
答案 2 :(得分:0)
从我看到的提升1_48中添加了对线程lib的boost :: pool依赖(参见1.47和1.48
我认为这是不幸的,更好的决定只使用标题lightweight mutex
您可以更改pool \ detail \ mutex.hpp,但可能更容易链接到线程lib,尤其是在使用其他库时。