【问题标题】:Build process crashes with boost and C++11使用 boost 和 C++11 构建过程崩溃
【发布时间】:2016-02-10 08:09:07
【问题描述】:

我有什么:

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

我的麻烦:

当我使用 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(来自 repo)

g++ 版本:4.8.4(来自 repo)

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

Linux Mint:17.3 罗莎


更新:

示例: 您可以通过this link下载我尝试编译的代码。

说明:

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

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

  5. 再试一次,你会得到错误。

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

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

【问题讨论】:

  • 对不起。第一个错误是“typedef boost::function 回调;类型不完整”
  • 所以您的程序实际上并没有崩溃,而是您有构建错误?您能否尝试创建一个Minimal, Complete, and Verifiable Example 并展示给我们看?请编辑您的问题以包含该问题。以及来自 MCVE 的实际(完整且未经编辑的)错误。
  • @JoachimPileborg 要创建示例需要编译所有库。我已经将我正在尝试编译的代码添加到我的问题中。关于来自 MCVE 的错误 - g++ 生成此pastebin.com/iU5agusy

标签: linux qt c++11 boost crash


【解决方案1】:

我找到了破解方法,它对我有用。

我将文件 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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 感谢链接,但它看起来像废弃的存储库(上次评论是 6 个月前),我实际上需要 5.6 服务器版本的库 :)
    猜你喜欢
    • 1970-01-01
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多