【发布时间】:2012-05-04 10:52:12
【问题描述】:
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?
【问题讨论】:
-
boost::singleton_pool使用的是mutex类型,该类型位于boost::thread库中。因此需要链接 libboost_thread。 -
如果你查看 boost\pool\detail\mutex.hpp 似乎池库定义了它自己的互斥体并且没有引用 boost::thread 库
-
@MariusBucur:我会再次检查,以验证我的答案。
-
@nabulke 实际上 boost::pool 1.49 使用了 boost::thread,我正在查看版本 1.47,它定义了自己的互斥锁 (boost.org/doc/libs/1_47_0/boost/pool/detail/mutex.hpp)。如果不需要与线程库链接,则可以选择使用较旧的池库版本。