我能在QNX中使用C++11吗?

8
我有一些跨平台代码,其中包含一些C++11特性,例如#include <thread>等。我将很快使用QNX 6.6板,我想知道我的代码是否可以在其上编译,并且哪些功能可用。 QCC是官方的QNX C ++编译器,但我找不到任何支持哪些C ++ 11功能,甚至是哪些C ++功能的文档。这是GCC的封装还是自己的东西?无论哪种方式,在这个平台上我能否获得或编译其他编译器?

你们的Airforce One使用QNX吗?;-) 据我所知,qcc只是使用gcc,因此它取决于QNX 6.6使用哪个gcc。快速搜索显示QNX 6.6正在使用gcc 4.7(http://www.qnx.com/developers/articles/rel_5849_7.html),这里是gcc 4.7支持的功能列表:https://gcc.gnu.org/projects/cxx0x.html - Marged
1
@Marged 我会回答这个问题。这是关于这个问题任何人都能得到的最好答案了。 - user4581301
3个回答

11
据我所知,qcc 内部仅使用 gcc。因此,您可以使用 QNX 决定放入其包中的 gcc 版本提供的所有功能。
QNX 6.6 发行说明 可以看出,使用了 gcc 4.7:
- GCC 4.7 工具链,包括对 Intel 高级矢量扩展 (AVX) 的支持 - GDB 7.5 - 新增: Binutils 2.24 - Python 2.7.5,作为主机端工具
发行说明提供了有关 gcc 4.7 的信息链接,但我认为 此链接 更好地显示了支持的特定功能。链接页面上有太多信息,因此我不会复制它。但实质上,该链接指出:
GCC提供对2011年ISO C++标准的实验性支持。可以通过使用-std=c++11或-std=gnu++11编译器选项来启用此支持... GCC的C++11模式实现了由ISO C++委员会制定的C++11标准的大部分内容。

qcc只是在内部使用gcc。7年后,它仍然有效吗? - John

7
尽管@Marged的回答已经涵盖了您问题的各个方面,我想补充说明一下:也可以获得所有GNU开发工具(如gccgdbmake)的更高版本。这是由QNX工作人员提供的“仅用于实验”,我想1。但到目前为止,我的使用经验都是好的。
请查看QNX更新的核心开发工具
(您需要先注册QNX社区门户网站才能打开链接) enter image description here 然后,您将像这样更新Linux开发系统:
- 从此处获取文件 - 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 官方文本:“Core Development Tools的稳定版本包含在QNX Momentics中。您可以通过此项目下载当前正在开发的更新版本,并更早地从它们的增强功能中受益!”

我只有一个问题:QtCore/qglobal.h:39: error: cstddef: No such file or directory # include <cstddef>,有什么想法吗?当切换到4.6.3(默认先前版本)时一切正常。 - Gelldur
听起来更像是您的QT环境没有正确安装和配置(Qt Creator)。您可能在使用MS Visual Studio吗?说实话,我还没有在QNX开发环境中与QT结合使用过,所以在这里我帮不上太多忙。 - Jim McAdams

5

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};)是有问题的。代码可以编译通过,但运行时会失败,而且错误信息不太容易理解。再次说明一下,我目前不知道这个问题的当前状态,所以你可能会有不同的情况。


1
我可以确认这一点。QNX 6.6的列表初始化仍然存在问题。代码会卡住。我已经搜索过了,这是我见过唯一有人抱怨这个问题的地方。 - Timtianyang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接