繁体   English   中英

使用Boost和C ++ 11构建过程崩溃

[英]Build process crashes with boost and C++11

我有的:

  • 我正在为Linux编写Qt应用程序(我在Linx Mint 17.3 64位中工作)
  • 我在Qt项目(Qt ver 5.5)中使用C ++ 11功能
  • 我想将libslave添加到我的Qt项目中。
  • libslave使用不推荐使用(针对C ++ 11)的boost::functionboost::shared_ptrboost::bindboost::any

我的麻烦:

当我用gcc编译时(v整个项目或仅带有-std=c++11库,boost崩溃会导致很多错误。QtCreator显示大约4000个错误,但它们非常相似,看起来像:

  1. typedef boost::function< void( RecordSet& )> callback; is not complete type

  2. BOOST_NOEXCEPT'does not name a type ~any() BOOST_NOEXCEPT

等等...

我试图用C ++ 11 std库重写库,但是std不包含boost::any类似物,所以这不是一个好主意。


题:

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


Boost版本:1.54(来自回购)

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

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

Linux Mint:17.3罗莎


更新:

示例:您可以通过此链接下载我尝试编译的代码。

指令:

  1. 下载tarball
  2. 提取
  3. 转到文件夹,然后键入make(一切正常)
  4. 打开MakeFile并将CXX变量替换为

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

  5. 再次尝试进行操作,您会遇到错误。

PS要编译库,您需要libmysqld-devlibboost-all-devlibmysqlclient-dev

可能您还需要其他东西,但我不会保留。 抱歉。

我发现了该hack,它对我有用。

我用以下字符串将文件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);
}
...

并将库中所有文件中的所有boost::shared_ptrboost::function替换为std::shared_ptrstd::function

之后,所有内容都可以编译并可以正常使用std=c++11标志。

您可以在此处查看nanomysql.h的整个代码:

链接到代码

使用libslave的实际分支-https: //github.com/vozbu/libslave ,支持c ++ 11。 即将支持mysql 5.6和5.7

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM