我可以在 QNX 中使用 C++11 吗?

Am I able to use C++11 in QNX?

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

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

据我所知,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,作为主机端工具

发行说明提供了 link 有关 gcc 4.7 的信息,但我认为 this link 更好地显示了支持哪些特定功能。 linked 页面上的信息太多,因此我不复制它。但本质上 link 声明:

GCC provides experimental support for the 2011 ISO C++ standard. This support can be enabled with the -std=c++11 or -std=gnu++11 compiler option ... GCC's C++11 mode implements much of the C++11 standard produced by the ISO C++ committee

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。

虽然 的回答似乎涵盖了您问题的所有重要方面,但我想补充一点,也可以获得所有 GNU 开发工具的最新版本(例如 gccgdbmake..)。这是QNX工作人员官方为"experimental use only"提供的,我猜1。但到目前为止,我对他们只有很好的体验。

查看 QNX 的更新 Core Development Tools

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

然后您将像这样更新您的 Linux 开发系统:

  • here获取文件
    • Binutils
    • 海湾合作委员会
  • 将文件提取到新文件夹中 (不要直接提取和覆盖现有文件夹,因为它可能是符号 links 没有得到更新)
    • 应该创建 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 官方正文:"Stable versions of the Core Development Tools are included as part of QNX Momentics. You can download updated versions of these tools currently being developed through this project and benefit from their enhancements earlier!"