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

Build process crashes with boost and C++11

我有:


我的烦恼:

当我用 gcc 编译时(v 整个项目或只有带 -std=c++11 标志的库 boost 崩溃并出现许多错误。Qt Creator 显示大约 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 薄荷:17.3 罗莎


更新:

例子: 您可以通过 this link.

下载我尝试编译的代码

说明:

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

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

  5. 再试一次,会报错

P.S。 要编译库,您需要 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的完整代码你可以在这里看到:

Link to code

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