【问题标题】:Am I able to use C++11 in QNX?我可以在 QNX 中使用 C++11 吗?
【发布时间】:2015-12-09 00:02:21
【问题描述】:

我有一些跨平台代码,其中包含一些 C++11 功能,如 #include <thread> 等。我很快就会使用 QNX 6.6 板,我想知道我的代码是否可以在上面编译,以及哪些功能可用。

QCC 是官方的 QNX C++ 编译器,但我找不到任何文档引用了它支持的 C++11 功能,甚至一般的 C++ 功能。这是 GCC 的包装还是它自己的东西?无论哪种方式,我可以在这个平台上获取或编译其他编译器吗?

【问题讨论】:

  • 您的空军一号使用 QNX 吗? ;-) 据我所知,qcc 只是使用gcc,因此它取决于 QNX 6.6 使用哪个 gcc。快速搜索显示 QNX 6.6 正在使用 gcc 4.7 (qnx.com/developers/articles/rel_5849_7.html),以下是 gcc 4.7 支持的功能列表:gcc.gnu.org/projects/cxx0x.html
  • @Marged 我会回答那个。对于这个问题,任何人都会得到它。

标签: c++ c++11 qnx


【解决方案1】:

据我所知,qcc 只是在内部使用gcc。因此,您可以使用 QNX 决定放入其软件包中的 gcc 版本提供的所有功能。

release notes of QNX 6.6使用gcc 4.7来看:

  • GCC 4.7 工具链,包括对英特尔高级矢量扩展 (AVX) 的支持
  • GDB 7.5
  • 新功能:Binutils 2.24
  • Python 2.7.5,作为主机端工具

发行说明提供了有关 gcc 4.7 信息的链接,但我认为this link 更好地显示了支持哪些特定功能。链接页面信息太多,所以我就不复制了。但本质上,链接状态:

GCC 为 2011 ISO C++ 标准提供实验性支持。可以使用 -std=c++11 或 -std=gnu++11 编译器选项启用此支持... GCC 的 C++11 模式实现了由 ISO C++ 委员会

【讨论】:

    【解决方案2】:

    虽然@Marged 的回答似乎涵盖了您问题的每个重要方面,但我想补充一点,还可以获得所有 GNU 开发工具的最新版本(例如 gcc em>、gdbmake..)。这是 QNX 工作人员官方提供的“仅供实验使用”,我猜1。但到目前为止,我和他们只有很好的经验。

    查看 QNX 更新后的Core Development Tools

    (您需要先注册到 QNX 社区门户才能打开链接)

    然后你会像这样更新你的 Linux 开发系统:

    • here获取文件
      • Binutils
      • GCC
    • 将文件解压到新文件夹中 (不要直接提取和覆盖现有文件夹,因为可能是符号链接没有得到更新)
      • 应该创建hosttarget 文件夹
    • 将新文件复制并粘贴到实际的 QNX 文件夹中并覆盖现有文件
    • 可选:将配置默认文件的值更新为新的编译器版本
      • 例如/../qnx650/host/linux/x86/etc/qcc/gcc/default
    • 确保安装了 32 位库(如果没有):
      • $ sudo apt-get install lib32stdc++6
      • 如果未正确安装,可能会出现以下错误 $ i486-pc-nto-qnx6.5.0-g++: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

    1 官方文本:“核心开发工具的稳定版本包含在 QNX Momentics 中。您可以通过此项目下载当前正在开发的这些工具的更新版本,并从它们的增强功能中受益!”支持>

    【讨论】:

    • 我只有这个问题:QtCore/qglobal.h:39: error: cstddef: No such file or directory # include <cstddef> 知道吗?切换到 4.6.3(默认上一个)时一切正常
    • 听起来更像是您的 QT 环境没有正确安装和配置(Qt Creator)。您是否正在使用 MS Visual Studio? TBH,我还没有将 QT 与 QNX 开发环境结合使用,所以在这里我不会提供太多帮助。
    【解决方案3】:

    qcc 使用的 gcc 版本确实支持 C++11 规范的大部分内容。我用过。只需将-std=c++11 添加到编译器行即可。

    我确实发现 QNX 6.6 上的 C++11 支持存在一个问题。这是在 2014 年 7 月,所以情况可能已经改变。 QNX 6.6 附带的 C++11 库中对向量初始化 (std::vector<int> {1,2, 3, 4};) 的支持被破坏。代码可以干净地编译,但在运行时会相当神秘地失败。同样,我目前不知道这个问题的当前状态,所以 YMMV。

    【讨论】:

    • 我可以确认这一点。 QNX 6.6 列表初始化仍然被破坏。代码只会卡住。我四处搜寻,这是我看到人们抱怨的唯一地方。
    猜你喜欢
    • 1970-01-01
    • 2011-06-02
    • 2015-10-17
    • 2017-10-17
    • 1970-01-01
    • 2015-03-11
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    相关资源
    最近更新 更多