c/c++ 多线程 ubuntu18.04 boost编译与运行的坑
程序员文章站
2023-03-08 19:11:11
多线程 boost编译与运行的坑 背景:因为要使用boost里的多线程库,所以遇到了下面的坑。 系统版本:ubuntu18.04 一,安装boost 1,去boost "官网" 下载 boost_1_XX_0.tar.gz 2,解压 3,进去解压后的文件夹 4,编译 5,安装 注意:安装完成后,会有 ......
多线程 boost编译与运行的坑
背景:因为要使用boost里的多线程库,所以遇到了下面的坑。
系统版本:ubuntu18.04
一,安装boost
1,去boost下载 boost_1_xx_0.tar.gz
2,解压
tar -zxvf boost_1_65_0.tar.gz
3,进去解压后的文件夹
cd boost_1_xx_0
4,编译
bootstrap.sh
5,安装
./b2
注意:安装完成后,会有信息打印到控制台,最重要的就是:
- 头文件所在的路径(我的例子:/home/ys/downloads/boost_1_68_0
- 库文件所在的路径(我的例子:/home/ys/downloads/boost_1_68_0/stage/lib)
二,编译使用了boost库里的多线程库的代码的坑,比如下面的代码。如果下面的代码想编译通过,必须使用下面的命令。
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:指定库文件所在的路径。如果不指定出下面的错误。
/usr/bin/ld: cannot find -lboost_thread /usr/bin/ld: cannot find -lboost_system collect2: error: ld returned 1 exit status
参数太长了,好麻烦。
省略-i的办法,在/etc/profile文件里加下面一行,也就是头文件所在的路径,以后就可以不输入-i里,修改(需要root权限)后需要重启系统
export cplus_include_path=/home/ys/downloads/boost_1_68_0
省略-l的办法,网上一大堆,但实验了都不好用,呜呜呜。
三,终于编译好了,运行一下,duang,又崩了,说找不到库。原因是:运行时系统要去找这2个库文件boost_thread,boost_system,但是这2个库文件不在系统能找到的地方,所以崩了。
解决办法:编辑/etc/ld.so.conf文件末尾,加下面一行,也就是库文件所在的路径,重启系统后,就能找到它们啦。
/home/ys/downloads/boost_1_68_0/stage/lib
#include <map> #include <string> #include <mutex> #include <boost/thread/shared_mutex.hpp> int main(){ }
c/c++ 学习互助qq群:877684253
本人微信:xiaoshitou5854
上一篇: Ball
下一篇: Android UI布局 线性布局