如何在 Ubuntu 14.04 上的 QT creator 中使用 Boost 库

     2023-02-21     110

关键词:

【中文标题】如何在 Ubuntu 14.04 上的 QT creator 中使用 Boost 库【英文标题】:How to use Boost library in QT creator on Ubuntu 14.04 【发布时间】:2016-09-24 08:12:51 【问题描述】:

我想在 Ubuntu 14.04 上使用 QT creator 中的 C++ Boost 库,尝试了很多方法后,我仍然报错。

我使用以下方式安装了 Boost 库:

sudo apt-get install libboost-all-dev

Boost库安装在目录中:

/usr/include/boost

这是我的 main.cpp

#include <QCoreApplication>
#include<iostream>
#include <boost/asio.hpp>
#include <boost/asio/steady_timer.hpp>

using namespace std;


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

    QCoreApplication a(argc, argv);

    boost::asio::steady_timer timer_;
    timer_.expires_from_now(1000);


    return a.exec();

任何我的 .pro 文件:

QT += core
QT -= gui

CONFIG += c++11

TARGET = test_boost_lib_in_QT
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app

SOURCES += main.cpp

INCLUDEPATH += /usr/include/boost

LIBS += -L/usr/include/boost -lboost_system
LIBS += -L/usr/include/boost  -lboost_chrono
LIBS += -L/usr/include/boost  -lboost_thread
LIBS += -L/usr/include/boost  -lboost_timer

编译错误是:(我使用“ctrl+B”直接从QT编译)

/home/ndn-experiment/Desktop/test_boost_lib_in_QT/main.cpp:13: error: no matching function for call to 'boost::asio::basic_waitable_timer<std::chrono::_V2::steady_clock>::basic_waitable_timer()'
 boost::asio::steady_timer timer_;
                           ^

/home/ndn-experiment/Desktop/test_boost_lib_in_QT/main.cpp:14: error: no matching function for call to 'boost::asio::basic_waitable_timer<std::chrono::_V2::steady_clock>::expires_from_now(int)'
 timer_.expires_from_now(1000);
                             ^

我该怎么办?

【问题讨论】:

首先 - asio 需要 io_service。 stable_timer 没有默认构造函数。第二 - expires_from_now 需要一个持续时间作为参数。 int 参数没有重载。 【参考方案1】:

第一个是因为你需要将io_service传递给构造函数:

boost::asio::io_service io;
boost::asio::steady_timer timer(io);

第二个是因为expires_from_now不带int,它需要一个duration参数:

timer.expires_from_now(boost::posix_time::seconds(5));

检查documentation 也是一个好主意,它有用法示例。

【讨论】:

【参考方案2】:

在网上浏览了这么多帖子,遇到了这么多错误,我终于让我的程序运行起来了。 在此我想回答我自己的问题,强调两点:

    另一种创建类对象的方法,该类的构造函数接受多个参数

    boost::asio::steady_timer的正确使用方法

我的 main.cpp

#include <QCoreApplication>
#include <iostream>
#include <boost/asio.hpp>
#include <boost/asio/steady_timer.hpp>
#include <chrono>
#include <boost/chrono.hpp>

using namespace std;

typedef boost::asio::steady_timer timer_type;

class timer_expire

public:

    timer_expire(boost::asio::io_service& io):timer_(io)

    void timer_expires(int n_milliseconds) 

        timer_.expires_from_now(boost::chrono::milliseconds(n_milliseconds));

        //need timer_.async_wait() here

    

private:
    timer_type timer_;
;



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

    QCoreApplication a(argc, argv);

    boost::asio::io_service io;

    timer_expire timer_expire_(io);
    timer_expire_.timer_expires(10000);

    return a.exec();

我的 .pro 文件(请注意QMAKE_CXXFLAGS

QT += core
QT -= gui

CONFIG += c++11

TARGET = test_boost_lib_in_QT
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app

SOURCES += main.cpp

CONFIG += c++11

QMAKE_CXXFLAGS += -std=c++11

INCLUDEPATH += /usr/include/boost

QMAKE_CXXFLAGS += -DBOOST_ASIO_DISABLE_STD_CHRONO
LIBS += -L/usr/include/boost -lboost_system -lboost_chrono -lboost_thread -lboost_timer

我的g++ 版本是4.8.4

注意boost::asio::steady_timer还有另一种方法,将QMAKE_CXXFLAGS设置为-DBOOST_ASIO_HAS_STD_CHRONO,请参考post。

也可以看看Chrono。

【讨论】:

您的包装类很糟糕,因为它确实隐藏了持续时间的类型。原来的界面你可以通过几小时、几秒等等。您的界面没有给出任何提示,它需要几毫秒,而原来的界面是类型安全的。 @stefan 只是一个玩具类,用于展示如何成功编译 boost::asio::steady_timer

Ubuntu 14.04TLA 上的代码块和 Gtkmm

...是Windows用户,所以我对Linux环境非常陌生。我真的不知道如何在Linux环境中安装应用程序。请我需要有关如何使用MinGWforUbuntu获取代码块以及如何配置它的帮助。我还需要有关 查看详情

如何卸载ubuntu14.04上的git

参考技术A1)当我们知道软件的名称,那么我们就直接在终端命令窗口中输入命令就可以了:sudoapt-getremove--purgegoogle-chrome-unstable--purge选项表示彻底删除改软件和相关文件2)如果还是卸载不掉的话,那推荐你用卸载能力很强的腾... 查看详情

在 Ubuntu 14.04 上安装 Qt 5.5.1 - 在终端上抛出 qt.network.ssl 错误

】在Ubuntu14.04上安装Qt5.5.1-在终端上抛出qt.network.ssl错误【英文标题】:InstallingQt5.5.1onUbuntu14.04-throwsqt.network.sslerroronterminal【发布时间】:2015-12-2108:15:19【问题描述】:我打算在虚拟机上运行的ubuntu14.04上安装qt5.5.1。我已经从qt-io... 查看详情

如何卸载ubuntu14.04上的git

参考技术A比如利用第三方软件。我用腾讯电脑管家举例(免费安全软件,杀毒+管理2合1)。打开腾讯电脑管家——工具箱——软件卸载。电脑管家是直接把软件卸载同时把注册列表也就清理了。(有的软件重启后会自动删除)... 查看详情

如何制作响应 ubuntu 14.04 和 16.04 上的 syslog 事件的 c# 程序?

】如何制作响应ubuntu14.04和16.04上的syslog事件的c#程序?【英文标题】:Howtomakeac#programthatrespondstosyslogeventsonubuntu14.04and16.04?【发布时间】:2019-02-2215:49:26【问题描述】:我响应系统日志事件的解决方案在几个小时后停止工作。我... 查看详情

如何在本地 ubuntu14.04 上使用域名设置服务器?

】如何在本地ubuntu14.04上使用域名设置服务器?【英文标题】:HowtosetupserverwithDomainnameonlocalubuntu14.04?【发布时间】:2016-11-0318:48:09【问题描述】:如何在本地机器上的灯上设置域名?【问题讨论】:您好!浏览此链接肯定会对您... 查看详情

在 DigitalOcean Ubuntu 14.04 中的 Meteor 上的 Webshot 失败

】在DigitalOceanUbuntu14.04中的Meteor上的Webshot失败【英文标题】:WebshotfailsonMeteorinDigitalOceanUbuntu14.04【发布时间】:2016-05-1223:47:46【问题描述】:我正在使用此代码生成pdf:letfileUri=process.env.PWD+\'/storage/orders-pdf/\'+fileName;//CommenceWebshot 查看详情

npm 全局安装后如何在 Virtual Box Ubuntu 14.04 中修复 $PATH

】npm全局安装后如何在VirtualBoxUbuntu14.04中修复$PATH【英文标题】:howtofix$PATHinVirtualBoxUbuntu14.04afternpmglobalinstall【发布时间】:2015-12-2716:35:13【问题描述】:我一直在尝试使用ubuntu14.04和Apache2.4在虚拟机中全局安装npm,但Laravel5.1存... 查看详情

Java/Ubuntu - 在 Windows 上的主要工作之外打印,但在 Ubuntu 14.04 上不执行任何操作

】Java/Ubuntu-在Windows上的主要工作之外打印,但在Ubuntu14.04上不执行任何操作【英文标题】:Java/Ubuntu-PrintoutsideofmainworksonWindowsbutdoesnothingonUbuntu14.04【发布时间】:2016-08-2023:52:31【问题描述】:我有一个Intellij项目。我在Windows上编... 查看详情

ubuntu14.04+qt5.7.1(静态编译)

...870.html参考链接:http://blog.sina.com.cn/s/blog_6f3d8a850102vwfx.htmlUbuntu安装Qt时默认为动态编译,编译的结果运行时需要配置很多库,如果要在多台设备上测试,静态编译就显得很方便。测试环境:ubuntu14.04+Qt5.7.11、源码下载, 查看详情

Ubuntu 14.04 上的 Laravel 5.1 本地主机错误

】Ubuntu14.04上的Laravel5.1本地主机错误【英文标题】:LocalhostErrorwithLaravel5.1onUbuntu14.04【发布时间】:2016-02-2123:32:30【问题描述】:在这里看过以前的文章,但没有运气。我刚刚通过composer安装了Laravel5.1。我一直在关注位于here的官... 查看详情

在 AWS g2 上的 Ubuntu 14.04 上使用带 GPU 的 Theano

】在AWSg2上的Ubuntu14.04上使用带GPU的Theano【英文标题】:UsingTheanowithGPUonUbuntu14.04onAWSg2【发布时间】:2014-08-3103:36:33【问题描述】:我无法让Theano在我的机器上使用GPU。当我跑步时:/usr/local/lib/python2.7/dist-packages/theano/misc$THEANO_FLAGS... 查看详情

Vagrant 挂在 Ubuntu 14.04 上的 NFS 挂载

】Vagrant挂在Ubuntu14.04上的NFS挂载【英文标题】:VagranthangsonNFSmountingonUbuntu14.04【发布时间】:2015-10-2211:46:17【问题描述】:直到今天,我的vagrant设置运行良好且流畅。但是发生了一些事情,我不知道是什么。突然间,当我vagrantup... 查看详情

在 Ubuntu 14.04 上以 Yarn-Client 模式在 Spark 上的 Zeppelin 中加载外部依赖项

】在Ubuntu14.04上以Yarn-Client模式在Spark上的Zeppelin中加载外部依赖项【英文标题】:LoadingexternaldependenciesinZeppelinonSparkinYarn-ClientmodeonUbuntu14.04【发布时间】:2017-01-1614:36:28【问题描述】:亲爱的社区!在我描述问题之前,这里先简... 查看详情

Qt WebEngine 未在 Ubuntu 14.04 上与 Qt 5.12 链接

】QtWebEngine未在Ubuntu14.04上与Qt5.12链接【英文标题】:QtWebEnginenotlinkingwithQt5.12onUbuntu14.04【发布时间】:2019-08-1611:37:47【问题描述】:我正在尝试构建我的Qt应用程序,但出现以下链接错误:/opt/Qt5.12.2/5.12.2/gcc_64/lib/libQt5WebEngineCore.... 查看详情

如何在 Ubuntu 14.04 中使用 systemctl

】如何在Ubuntu14.04中使用systemctl【英文标题】:HowtousesystemctlinUbuntu14.04【发布时间】:2016-09-2303:30:21【问题描述】:我尝试在Ubuntu14.04中执行以下命令:systemctlenable--nowdocker-cleanup-dangling-images.timer我也用sudo尝试过,我尝试用service... 查看详情

如何在 Ubuntu 14.04 上安装 MarkLogic 8?

】如何在Ubuntu14.04上安装MarkLogic8?【英文标题】:HowdoesoneinstallMarkLogic8onUbuntu14.04?【发布时间】:2015-09-0523:42:26【问题描述】:在Ubuntu14.04上安装MarkLogic8的步骤是什么?【问题讨论】:你看过官方文档的安装说明了吗?docs.marklogi... 查看详情

Ubuntu 14.04 上的虚拟主机。 - 访问禁止错误 403

】Ubuntu14.04上的虚拟主机。-访问禁止错误403【英文标题】:VirtualHostsonUbuntu14.04.-AccessForbiddenError403【发布时间】:2015-05-2421:42:11【问题描述】:抱歉,如果我的解释不完整或格式错误,我是Ubuntu新手。而且不是真正的计算机用户... 查看详情