当前位置: 首页 > news >正文

开发环境问题

1.问题单:在使用boost线程库时遇见各种报错信息。

系统: ubuntu desktop v16.04  boost: v1.67    IDE: Qtcreator v4.5.2 

使用测试代码如下:

#include <iostream>
#include<boost/thread/thread.hpp>
#include<boost/thread/mutex.hpp>

boost::mutex io_mutex;

struct count
{
    count(int id):id(id) {}

    void operator()()
    {
        for(int i = 0; i < 60; ++i)
        {
            boost::mutex::scoped_lock lock(io_mutex);
            std::cout << id << ": " << i << std::endl;
            sleep(1);
        }
    }


    int id;
};

int main()
{
    boost::thread thrd1(count(1));
    boost::thread thrd2(count(2));
    thrd1.join();
    thrd2.join();

    system("pause");
    return 0;
}

使用Qt Creator自动进行编译,有许多错误信息,取第一行如下:

/usr/local/boost/include/boost/system/error_code.hpp:703: error: undefined reference to `boost::system::generic_category()'

经过google,需要添加boost_system,首先确认自己boost lib的安装位置,在qt的工程文件pro中添加此项:

LIBS = -L/usr/local/lib -lboost_system

再次编译,新的错误出现:

/lib/x86_64-linux-gnu/libpthread.so.0:-1: error: error adding symbols: DSO missing from command line

提示缺失线程库,继续google,增加boost_thread库

LIBS = -L/usr/local/lib -lboost_system -lboost_thread

出现错误如下:

/lib/x86_64-linux-gnu/libpthread.so.0:-1: error: error adding symbols: DSO missing from command line

发现与上一个错误信息一样,感觉没有起作用,去掉后想加上以前的标志lpthread试试:

LIBS = -L/usr/local/lib -lboost_system -lpthread

结果报错如下:

/usr/local/boost/include/boost/thread/pthread/thread_data.hpp:155: error: undefined reference to `vtable for boost::detail::thread_data_base'

网上说要加上boost_thread库,于是不得已,又加上它,变成:

LIBS = -L/usr/local/lib -lboost_system -lboost_thread -lpthread

最后终于成功运行,boost_thread与pthread都不能省~,一个小小的库加载来来回回找了许久才解决,打个标记。

 

2.部署VS2017+BOOST1.68环境

  下载好VS2017与boost库,安装好VS2017,把boost库解压,进入windows命令,把目录切到boost库下面,直接运行bootstrap.bat文件,大约一分钟后会在boost库目录下生成一批文件,其中包括b2.exe,然后再运行下面一条命令:

b2.exe install --toolset=msvc-14.1 --prefix="D:/ProgramFiles/boost/lib" --without-python threading=multi --build-type=complete  address-model=64

  命令解析如下:

 

--toolset:设置编译器,如果用VC,设msvc, 用MinGW就设gcc。 
stage:可选install,选stage只生成库(静态库和动态库),install还包含include目录,其实,可以直接用我们下载下来的BOOST包里的boost目录,这个目录和install生成的include目录内容基本一样。 
--build-dir=”[temporary folder name”:编译的临时文件存放位置。 
--stagedir=” stage folder name]”:存放编译后库文件的路径,默认是stage。 
--build-type=complete:编译所有版本 
{
  variant=debug|release        决定编译什么版本(Debug or Release?)
  link=static|shared           决定使用静态库还是动态库。
  threading=single|multi       决定使用单线程还是多线程库。
  runtime-link=static|shared   决定是静态还是动态链接C/C++标准库。
}

link:是动态库还是静态库,static | shared,一般默认静态。
address-mode:address-model=64,如果没有这个属性的话,会默认生成32位的平台库,加入这个选项才能生成64位的DLL。如果运行在VS32位的命令行下需要添加” architecture=x86”,由于我们使用x64 Native Tools Command Prompt for VS 2017没有x86与x64之间的矛盾,所以未设置。 

  我的个人电脑编译了45分钟左右,最后编译成功,但文件目录生成结构有点不太好,自己把头文件和lib文件分别存放在两个文件夹,设置两个环境变量:

  BOOSTROOT=D:\sdk\boost

  BOOSTLIB=D:\sdk\boost\lib

  然后使用VS2017创建一个小项目文件测试一下:

#include <iostream>
#include<boost/date_time/gregorian/greg_date.hpp>

using namespace std;
using boost::gregorian::date;

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

    
    date a{ 2018, 1, 1 }, b{ 2018, 1, 9 };
    std::cout << (b - a).days() << "\n";

    cin.get();

    return 0;
}

 

  记得在VS2017把项目改成x64并添加boost的库文件和lib文件路径(已设置好的两个环境变量),编译成功,一切OK。

 

     

转载于:https://www.cnblogs.com/hbright/p/9216711.html

相关文章:

  • 【咸鱼教程】本地图片上传。动态GIF表情图生成
  • HTML_列表标签
  • docker基础
  • jstack
  • linux常用命令与终端快捷键总结
  • 别让程序员停止在35岁,如何让我们走得更远?
  • jQuery获取URL中的参数
  • try{ } catch (e){ }的理解
  • jQuery = 1.11.3 DomXSS漏洞
  • EOS多节点组网:商业场景分析以及节点启动时序
  • maven与sbt修改国内镜像
  • U盘安装Linux CentOS 6.8 系统
  • 5.20界面初步完成
  • spring mvc 文件上传 ajax 异步上传
  • react-native
  • [NodeJS] 关于Buffer
  • 2019.2.20 c++ 知识梳理
  • Bytom交易说明(账户管理模式)
  • Gradle 5.0 正式版发布
  • Linux链接文件
  • PaddlePaddle-GitHub的正确打开姿势
  • Wamp集成环境 添加PHP的新版本
  • WebSocket使用
  • 对象管理器(defineProperty)学习笔记
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 前端代码风格自动化系列(二)之Commitlint
  • 前端性能优化--懒加载和预加载
  • 三分钟教你同步 Visual Studio Code 设置
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 一个SAP顾问在美国的这些年
  • 移动端唤起键盘时取消position:fixed定位
  • 用jQuery怎么做到前后端分离
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • Android开发者必备:推荐一款助力开发的开源APP
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​iOS安全加固方法及实现
  • #数学建模# 线性规划问题的Matlab求解
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (33)STM32——485实验笔记
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (四)汇编语言——简单程序
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (原)本想说脏话,奈何已放下
  • (转)http-server应用
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • ./configure,make,make install的作用
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容