如何在linux上使用boost:thread-CC++

如何在linux上使用boost:thread-CC++,第1张

首先需要安装boost,步骤如下:

下载到 boost_1_49_0.tar.bz2 (当然,其他压缩格式也可以)后,可以把它放在用户目录下,即:~/

解压缩:tar -jxvf boost_1_49_0.tar.bz2

这样,出现文件夹:~/boost_1_49_0

然后进入:$ cd boost_1_49_0

你会发现有一�¸.sh命令:bootstrap.sh

运行它:$ ./bootstrap.sh     (boost自己的get start文档中说设置参数 --prefix=dir 其中dir为你想指定的安装文件夹,我建议就不用加这个参数,它会默认安装到/usr/local)

结束后出现一个可执行文件: ~/boost_1_49_0/b2

运行这个文件: $ sudo ./b2 install   (Ubuntu用户千万别忘了加sudo,不然安装后将无法完全使用)

编译安装时间比较长,根据不同机器的情况20~40分钟。结束后即安装完毕。

boost::thread的使用

#include <boost/thread.hpp>

#include <iostream>

void task1() { 

    // do stuff

    std::cout << "This is task1!" << std::endl

}

void task2() { 

    // do stuff

    std::cout << "This is task2!" << std::endl

}

int main (int argc, char ** argv) {

    using namespace boost 

    thread thread_1 = thread(task1)

    thread thread_2 = thread(task2)

    // do other stuff

    thread_2.join()

    thread_1.join()

    return 0

}

编译时的命令为:

$ g++ -I./inlcude -L./lib example.cpp -lboost_thread -o example

编译之后会出现一个 example 的可执行文件,可以运行:./example , 结果显示:

This is task2!

This is task1!

可能你在运行时会出现这样的错误:error while loading shared libraries: libboost_thread.so.1.49.0: cannot open shared object file: No such file or directory

这是因为要用到的库不在默认的环境变量里,可以使用下面的命令添加:

$ sudo ldconfig /usr/local/lib

添加后,再执行./example,这样你就完成了你的第一个boost::thread程序。

我系统是ubuntukylin14.04

然后今天去BOOST下了最新版的boost1.57版

下载下来的压缩文件我解压到/opt目录下即/opt/boost_1_57_0

然后

cd /opt/boost_1_57_0

./boststrap

./b2

这里b2命令执行完成后显示:

The Boost C++ Libraries were successfully built!

The following directory should be added to compiler include paths:

/opt/boost_1_57_0

The following directory should be added to linker library paths:

/opt/boost_1_57_0/stage/lib

然后我找了一段例子

C/C++ code?

1

2

3

4

5

6

7

8

9

10

#include<iostream>

#include<boost/bind.hpp>

using namespace std

using namespace boost

int fun(int x,int y){return x+y}

int main(){

int m=1int n=2

cout<<boost::bind(fun,_1,_2)(m,n)<<endl

return 0

}

用g++编译的时候提示

bst.cxx:2:31: fatal error: boost/bind.hpp: 没有那个文件或目录

#include<boost/bind.hpp>

^

compilation terminated.

打开synaptic, 找到libboost-all-dev, 安装即可。

安装后可以查看boost相关库,在/usr/lib/目录下

如:/usr/lib/libboost_date_time.a /usr/lib/libboost_math_tr1f-mt.a /usr/lib/libboost_serialization-mt.so

/usr/lib/libboost_date_time-mt.a/usr/lib/libboost_math_tr1f-mt.so /usr/lib/libboost_serialization.so

/usr/lib/libboost_date_time-mt.so /usr/lib/libboost_math_tr1f.so/usr/lib/libboost_serialization.so.1.42.0

/usr/lib/libboost_date_time.so /usr/lib/libboost_math_tr1f.so.1.42.0 /usr/lib/libboost_signals.a

/usr/lib/libboost_date_time.so.1.42.0 /usr/lib/libboost_math_tr1l.a /usr/lib/libboost_signals-mt.a

/usr/lib/libboost_filesystem.a /usr/lib/libboost_math_tr1l-mt.a /usr/lib/libboost_signals-mt.so

/usr/lib/libboost_filesystem-mt.a /usr/lib/libboost_math_tr1l-mt.so /usr/lib/libboost_signals.so

/usr/lib/libboost_filesystem-mt.so /usr/lib/libboost_math_tr1l.so/usr/lib/libboost_signals.so.1.42.0

/usr/lib/libboost_filesystem.so /usr/lib/libboost_math_tr1l.so.1.42.0 /usr/lib/libboost_system.a

/usr/lib/libboost_filesystem.so.1.42.0 /usr/lib/libboost_math_tr1-mt.a /usr/lib/libboost_system-mt.a

/usr/lib/libboost_graph.a /usr/lib/libboost_math_tr1-mt.so /usr/lib/libboost_system-mt.so

/usr/lib/libboost_graph-mt.a/usr/lib/libboost_math_tr1.so /usr/lib/libboost_system.so

/usr/lib/libboost_graph-mt.so /usr/lib/libboost_math_tr1.so.1.42.0 /usr/lib/libboost_system.so.1.42.0

/usr/lib/libboost_graph.so /usr/lib/libboost_prg_exec_monitor.a /usr/lib/libboost_test_exec_monitor.a

/usr/lib/libboost_graph.so.1.42.0 /usr/lib/libboost_prg_exec_monitor-mt.a /usr/lib/libboost_test_exec_monitor-mt.a

复制代码头文件在/usr/include/boost下gnuser@ubuntu:~$ ls /usr/include/boost/

accumulators date_time.hpp io_fwd.hpp pointer_cast.hpp spirit

algorithmdetailiostreams pointer_to_other.hpp spirit.hpp

aligned_storage.hpp dynamic_bitsetis_placeholder.hpp pool statechart

any.hpp dynamic_bitset_fwd.hppiterator preprocessor static_assert.hpp

archive dynamic_bitset.hppiterator_adaptors.hpp preprocessor.hpp strong_typedef.hpp

array.hppenable_shared_from_this.hpp iterator.hpp program_optionsswap.hpp

asio exception lambda program_options.hppsystem

复制代码boost库命名:

比如libboost_regex-vc71-mt-d-1_34.lib,

lib: 库前缀,除了windows平台,都是这个前缀

boost_regex: boost的regex库

-mt 多线程支持

-d debug版本


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7273769.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-03
下一篇 2023-04-03

发表评论

登录后才能评论

评论列表(0条)

保存