我刚刚在我的机器上安装了Boost。我正在使用Visual Studio 2010 Ultimate。要安装Boost,请按照此处的说明进行操作:http://www.boost.org/doc/libs/1_48_0/more/getting_started/windows.html。特别是这一行:“BoostPro Computing提供的安装程序将下载并安装预编译的二进制文件到boost根目录的lib \子目录中”。所以我发现我的机器上运行了boost_1_47。我开始了一个小测试程序,使用boost :: thread库。但是这段代码是boost :: thread介绍中的第一个示例代码将无法编译:
#include <boost/thread.hpp>
boost::thread make_thread();
void f()
{
boost::thread some_thread = make_thread();
some_thread.join();
}
int main()
{
f();
return 0;
}
这是错误消息:
error LNK2019: unresolved external symbol "class boost::thread __cdecl make_thread(void)" (?make_thread@@YA?AVthread@boost@@XZ) referenced in function "void __cdecl f(void)" (?f@@YAXXZ)
但是这段代码编译:
#include <boost/thread.hpp>
void testFunction()
{
}
int main()
{
boost::thread_group group;
group.create_thread(&testFunction);
group.join_all();
return 0;
}
上面的代码我从一些论坛条目中复制/粘贴。但是这一切的原因是什么?版本47不支持make_thread()吗?如果是这样,为什么只有链接器会抱怨呢?我错过了什么?
编辑:
我对提出这个问题表示歉意,我觉得很难承认,但这属于RTFM类别。但无论如何偶然发现:阅读下面的答案。
答案 0 :(得分:3)
在Google上快速搜索并阅读有关thread management的文档后,在我看来,函数make_thread
只是一个虚函数,用于示例中的线程可以在不同的线程对象。
如果你想要一个创建一个线程的特定函数,你必须自己创建它。
答案 1 :(得分:2)
在boost中没有定义make_thread
函数。我想你误解了这个例子。这一行:
boost::thread make_thread();
只是“自定义”make_thread
函数的原型,但没有实现。这就是链接器无法找到它的原因。