经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C » 查看文章
c/c++ 多线程 ubuntu18.04 boost编译与运行的坑
来源:cnblogs  作者:小石王  时间:2018/11/12 10:01:35  对本文有异议

多线程 boost编译与运行的坑

背景:因为要使用boost里的多线程库,所以遇到了下面的坑。

系统版本:ubuntu18.04

一,安装boost

1,去boost官网下载 boost_1_XX_0.tar.gz

2,解压

  1. tar -zxvf boost_1_65_0.tar.gz

3,进去解压后的文件夹

  1. cd boost_1_XX_0 

4,编译

  1. bootstrap.sh 

5,安装

  1. ./b2

注意:安装完成后,会有信息打印到控制台,最重要的就是:

  • 头文件所在的路径(我的例子:/home/ys/Downloads/boost_1_68_0
  • 库文件所在的路径(我的例子:/home/ys/Downloads/boost_1_68_0/stage/lib)

二,编译使用了boost库里的多线程库的代码的坑,比如下面的代码。如果下面的代码想编译通过,必须使用下面的命令。

  1. g++ -g -I/home/ys/Downloads/boost_1_68_0 boost-shared-mutex.3.13.cpp -std=c++11 -L/home/ys/Downloads/boost_1_68_0/stage/lib -lboost_thread -lboost_system -pthread

解释一下各个参数的作用:

  • -I:因为使用了<boost/thread/shared_mutex.hpp>头文件,这个头文件只在你的安装的文件夹里,假设系统找不到这个文件夹,所以就找不这个头文件,指定了-I就是告诉编译器去哪里找这个头文件。

  • -l:程序要使用的外部库(动态库,二进制文件),库名为boost_thread和boost_system,这2个库对应的实际文件为,libboost_thread.so和libboost_system.so,也就是去掉了lib和.so。如果这2个库文件编译器能够找到就可以编译,但是如果找不到就需要用-L参数来告诉编译器这2个文件在哪里

  • -L:指定库文件所在的路径。如果不指定出下面的错误。

    1. /usr/bin/ld: cannot find -lboost_thread
    2. /usr/bin/ld: cannot find -lboost_system
    3. collect2: error: ld returned 1 exit status

    gcc/g++ 参数详解

参数太长了,好麻烦。

省略-I的办法,在/etc/profile文件里加下面一行,也就是头文件所在的路径,以后就可以不输入-I里,修改(需要root权限)后需要重启系统

  1. export CPLUS_INCLUDE_PATH=/home/ys/Downloads/boost_1_68_0

省略-L的办法,网上一大堆,但实验了都不好用,呜呜呜。

三,终于编译好了,运行一下,Duang,又崩了,说找不到库。原因是:运行时系统要去找这2个库文件boost_thread,boost_system,但是这2个库文件不在系统能找到的地方,所以崩了。

解决办法:编辑/etc/ld.so.conf文件末尾,加下面一行,也就是库文件所在的路径,重启系统后,就能找到它们啦。

  1. /home/ys/Downloads/boost_1_68_0/stage/lib
  1. #include <map>
  2. #include <string>
  3. #include <mutex>
  4. #include <boost/thread/shared_mutex.hpp>
  5. int main(){
  6. }

c/c++ 学习互助QQ群:877684253

本人微信:xiaoshitou5854

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号