多线程 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

gcc/g++ 参数详解

参数太长了,好麻烦。

省略-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

c/c++ 多线程 ubuntu18.04 boost编译与运行的坑的更多相关文章

  1. 在Ubuntu18.04下编译出ffmpeg(支持推流H265成rtmp)

    Ubuntu18.04下编译libx264.libx265.libfdk_aac和ffmpeg 一.编译x264库 二.编译fdk-aac库 三.编译x265库 四.编译FFmpeg源码 五.设置环境 ...

  2. Linux c++ vim环境搭建系列(3)——Ubuntu18.04.4编译安装youcompleteme

    3. youcompleteme编译安装 参考网址: https://github.com/ycm-core/YouCompleteMe#linux-64-bit 建议不要用这个博客的方法: http ...

  3. Ubuntu18.04下编译安装Guitarix 0.37.3

    准备工作 源文件下载 https://sourceforge.net/projects/guitarix/files/guitarix/ 安装依赖. 参考 https://sourceforge.ne ...

  4. Linux c++ vim环境搭建系列(2)——Ubuntu18.04.4编译安装llvm clang

    2. 源码编译安装llvm clang 参考网址: https://llvhttps

  5. Linux c++ vim环境搭建系列(1)——Ubuntu18.04.4编译安装vim8.2

    1. vim源码编译安装 参考网址: https://github.com/ycm-core/YouCompleteMe/wiki/Building-Vim-from-source 安装各类依赖库 s ...

  6. Ubuntu18.04 显卡驱动+Cuda安装踩坑记录 以及Ubuntu虚拟内存的添加

    前几天买了张亮机卡,终于把主显卡成功直连到Unraid OS的虚拟机上了.然后就开始安装ubuntu系统开始配置环境,遇到了不少坑,特此记录. gcc版本问题 在安装显卡驱动的时候,不要修改gcc版本 ...

  7. Ubuntu18.04下可以完美运行Quake3 Arena

    安装 其实很早就知道Linux下面可以跑Quake3, 但是一直没有付诸行动, 在硬盘上躺了很多年的Quake III Arena, 和Brood一起从来不舍得删, 昨天终于想起来试试. 安装很简单, ...

  8. 在ubuntu18.04上安装EOS

    在ubuntu18.04上安装EOS 在ubuntu18.04上安装EOS的目的: 把交易所的eos转到eos主网,防止交易所跑路或者交易所被黑客攻击 在不联网的安全环境下,用eos官方的命令行工具, ...

  9. Centos7.4和Ubuntu18.04安装PHP7.2

    安装依赖 yum install gcc-c++ libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcu ...

随机推荐

  1. 简单地做一下“回到顶部”按钮,用jQuery实现其隐藏和显示

    1.首先,我们要准备HTML代码: <div id="return-top"> <a href="#top">返回顶部</a> ...

  2. 什么是移动BI

    移动商务智能(移动商务智能或移动智能)定义为一个包含技术和组织元素的系统,可向用户提供历史和/或实时信息,以便在智能手机和平板电脑等移动设备上进行分析笔记本电脑),以实现有效的决策和管理支持,以提高公 ...

  3. 2018-12-25 VS Code英汉词典v0.0.8: 批量翻译文件部分命名

    续前文: VS Code英汉词典进化效果演示: 翻译文件所有命名 vscode"英汉词典"插件地址: 官方链接 现在实现的效果比之前的演示差很多, 因为executeDocumen ...

  4. #Java学习之路——基础阶段二(第八篇)

    我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...

  5. WinServer配置MySQL主从同步

    为什么要配置主从同步? 如果一台数据库服务器挂了,还有一个备用 为了方便配置,我采用两台WinServer2003虚拟机: 1.前期准备工作:安装好镜像文件,VMTOOLS,MySQL5.5 我这里以 ...

  6. Oracle ADDM报告生成和性能分析

    我写的SQL调优专栏:https://blog.csdn.net/u014427391/article/category/8679315 对于局部的,比如某个页面列表sql,我们可以使用Oracle的 ...

  7. Mac查看和杀死后台进程

    1. Mac 查看后台进程并显示 PID $ jobs -l 2. Mac 端口占用情况(将 port 改成需要查看的端口号,比如 8080) $ lsof -i tcp:port 2. 杀死进程,以 ...

  8. 一次生产 CPU 100% 排查优化实践

    前言 到了年底果然都不太平,最近又收到了运维报警:表示有些服务器负载非常高,让我们定位问题. 还真是想什么来什么,前些天还故意把某些服务器的负载提高(没错,老板让我写个 BUG!),不过还好是不同的环 ...

  9. SpringBoot启动原理及相关流程

    一.springboot启动原理及相关流程概览 springboot是基于spring的新型的轻量级框架,最厉害的地方当属自动配置.那我们就可以根据启动流程和相关原理来看看,如何实现传奇的自动配置 二 ...

  10. windows共享文件夹

    net share 查看本地共享文件夹 我们想要删除这些链接,删除所有的共享目录链接命令是: net use * /d 如果只是想删除单个共享目录的链接,那么命令是: net use \\主机名或IP ...