2008年8月13日星期三

mingw下使用boost::thread

今天下了一个boost,想试试它的thread库.折腾了一个下午,用mingw把thread编译出来了.记下来.
先要设置PATH路径,bjam只能通过这个路径找到g++
在/tools/jam/src下调用
build.bat mingw e:\ty\mingw
mingw 是指定toolset
e:\ty\mingw 是指定mingw的位置
(本来手册上说的是 --toolset=mingw --toolset-root="e:\ty\mingw" 但是我实际用的时候会出错,会把 --toolset-root="e:\ty\mingw" 这一整句都当作mingw的路径,结果就是找不到mingw.)
然后再 tools\jam\src\bin.ntx86\ 下调用编译好的 bjam.exe
bjam.exe --build-dir="e:\tmp" --toolset=gcc --with-thread stage
这个地方要用 gcc 做参数,用 mingw 不行,stage不知道是什么版本,我没查. --with-thread 是只编译thread库.
这就是编译的过程.
使用这个库如下
g++ -Wall boost.thread.test.cpp -o thread.test.exe -Ie:\ty\boost_1_35_0\ -Le:\ty\lib -lthread
用这个命令需要把上面编译的 boost_thread-mgw34-mt-1_35.lib 拷到 e:\ty\lib 文件夹下面,改名为 thread.lib 这个和Linux下不一样,不用改成libthread.
这样就应该能够编译出来了.
生成的exe运行的时候需要编译thread库是生成的 boost_thread-mgw34-mt-1_35.dll 文件在exe的当前文件夹中.

boost.thread.test.cpp的内容可以这样:
#include <boost/thread/thread.hpp>
#include <iostream>
void hello()
{
    std::cout << "Hello world, I'm a thread!" << std::endl;
}
int main(void)
{
    boost::thread thrd(&hello);
    thrd.join();
}