Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用boost和C++;11_Linux_Qt_C++11_Boost_Crash - Fatal编程技术网

Linux 使用boost和C++;11

Linux 使用boost和C++;11,linux,qt,c++11,boost,crash,Linux,Qt,C++11,Boost,Crash,我所拥有的: 我正在为Linux编写Qt应用程序(我在Linx Mint 17.3 64位中工作) 我在我的Qt项目(QtVer5.5)中使用C++11特性 我想添加到我的Qt项目中 libslave使用不推荐的(对于C++11)boost::function、boost::shared\u ptr、boost::bind和boost::any 我的麻烦是: 当我使用gcc(v)编译时,整个项目或只有带有-std=c++11标志boost的库崩溃,并出现许多错误。Qt Creator显示了

我所拥有的:

  • 我正在为Linux编写Qt应用程序(我在Linx Mint 17.3 64位中工作)
  • 我在我的Qt项目(QtVer5.5)中使用C++11特性
  • 我想添加到我的Qt项目中
  • libslave使用不推荐的(对于C++11)
    boost::function
    boost::shared\u ptr
    boost::bind
    boost::any

我的麻烦是:

当我使用gcc(v)编译时,整个项目或只有带有
-std=c++11
标志boost的库崩溃,并出现许多错误。Qt Creator显示了大约4000个错误,但它们非常相似,看起来像:

  • typedef boost::function回调;
    类型不完整

  • BOOST_NOEXCEPT'未命名类型
    ~any()BOOST\u NOEXCEPT

  • 等等

    我试图用C++11
    std
    库重写库,但是
    std
    不包含
    boost::any
    模拟,所以这是个坏主意


    问题:

    如何用c++11编译boost(或至少是libslave)


    增强版:1.54(来自回购协议)

    g++版本:4.8.4(来自回购协议)

    Qt版本:5.5(从官方网站下载)

    LinuxMint:17.3Rosa


    更新:

    例如: 你可以下载我试图编译的代码

    说明:

  • 下载tarball
  • 提取
  • 转到文件夹,只需键入make(一切正常)
  • 打开MakeFile并将CXX变量替换为

    CXX=g++-std=c++11

  • 再尝试一次,你就会出错

  • 附言。 要编译库,您需要
    libmysqld-dev
    libboost-all-dev
    libmysqlclient-dev


    也许你还需要别的东西,但我不记得了。对不起。

    我找到了黑客,它对我很有用

    我用以下字符串将文件nanomysql.h中的
    boost::bind
    用法替换为std::bind:

    ...
    typedef std::map<std::string, field> value_t;
    typedef std::vector< value_t > result_t;
    
    void store(result_t& out)
    {
        //You need specify template because of push_back has overloads
        auto hack = std::bind<void(result_t::*)(const value_t&)>(&result_t::push_back, &out, _1);
        use(hack);
    }
    ...
    
    。。。
    typedef std::映射值\u t;
    typedef std::向量<值>结果;
    无效存储(结果输出(&U)
    {
    //您需要指定模板,因为push_back具有重载
    自动hack=std::bind(&result\u t::push\u-back,&out,\u-1);
    使用(黑客);
    }
    ...
    
    并将库中所有文件中的所有
    boost::shared\u ptr
    boost::function
    替换为
    std::shared\u ptr
    std::function

    在这之后,所有的东西都可以编译并使用-
    std=c++11
    标志正常工作

    nanomysql.h的全部代码可以在这里看到:


    使用libslave的实际fork-支持c++11。很抱歉,mysql 5.6和5.7的支持即将推出。第一个错误是“typedef boost::function回调;类型不完整”因此,您的程序实际上并没有崩溃,而是出现了构建错误?您可以尝试创建一个并向我们展示吗?请编辑您的问题以包括该问题以及实际的(完整且未编辑的)来自MCVE的错误。@JoachimPileborg要创建示例,需要对所有库进行编译。我已将我试图编译的代码添加到我的问题中。关于来自MCVE的错误-g++生成此Thanx for链接,但它看起来像是废弃的存储库(最后一条评论是6个月前),我实际上需要用于5.6服务器版本的库:)