Как использовать разные стандарты компиляции в QNX Momentics 6.5?

Я пытаюсь создавать приложения для платы разработки Sabre i.MX6, на которой работает ОС QNX. Я использую QNX Momentics v6.5 для кросс-компиляции своего кода. Я написал простой код «Hello World» и пытаюсь скомпилировать его с новыми стандартами c, поскольку этого требует проект, над которым я работаю.

Когда я пытаюсь скомпилировать с любым флагом, скажем, -std=c99 или -std=c11, во время компиляции выдает ошибку:

cc: unknown Option -std=c99" or "cc: unknown Option -std=c11".

Я вижу, что он использует компилятор gcc 4.4.2.

Я не уверен, поддерживает ли эта версия gcc c99 или флаг, который я передаю, должен быть другим для QNX Momentics.


person Arvind    schedule 02.07.2018    source источник
comment
Можешь попробовать -Wc,-std=c11?   -  person Ctx    schedule 02.07.2018
comment
@Ctx Все еще показывает ту же ошибку. -Wc не вызывает никаких ошибок. Для чего этот флаг?   -  person Arvind    schedule 02.07.2018
comment
Передача аргумента именно компилятору, но я уже подозревал, что в данном случае это no-op.   -  person Ctx    schedule 02.07.2018
comment
Ой. Спасибо! Я не уверен, в чем проблема.   -  person Arvind    schedule 02.07.2018
comment
вы изменили Makefile или отредактировали свойства сборки? для меня в sdp7.0 это работает.   -  person thomachan    schedule 06.07.2018
comment
@thomachan Я добавил флаг к дополнительным параметрам компиляции в свойствах сборки и увидел, что это отражается в Makefile. Но ошибка при компиляции.   -  person Arvind    schedule 09.07.2018
comment
@Arvind, я использую Momentics 7.0 для imx8x, я могу использовать -std=c99 для armv7le.   -  person thomachan    schedule 13.07.2018


Ответы (2)


QNX 6.5 и gcc 4.4.2 не поддерживают C++11. См. документы QCC для получения дополнительной информации. В лучшем случае вы получите неполную и экспериментальную поддержку через -std=c++0x или -std=gun++0x.

QNX 6.6 включает gcc 4.7.3 с экспериментальной поддержкой C++11, а QNX 7.0 использует gcc 5.4.0 с полной поддержкой C++11 и C++14.

Полную информацию о поддержке стандартов gcc C++ можно найти на странице стандартов gcc. .

person sig11    schedule 16.07.2018
comment
Как насчет с11? Потому что это то, что я ищу. - person Arvind; 18.07.2018
comment
Не поддерживается в QNX 6.5... Необходимо обновить как минимум до 6.6. Возможно, вам захочется покопаться в Foundry27... Раньше там были более современные инструменты (хотя они неофициальные и не поддерживаются). - person sig11; 19.07.2018
comment
Спасибо за информацию! Но мой проект требует работы с устаревшим устройством, на котором работает эта конкретная версия QNX. - person Arvind; 20.07.2018
comment
Возможно, QNX может помочь, но я сомневаюсь в этом. Вы можете собрать более новую версию gcc и libc, если хотите... это может потребовать много работы. - person sig11; 23.07.2018

QNX 6.5 не поддерживает C++11 "из коробки", так как использует старый компилятор GNU (gcc 4.4.2). Однако в Центре программного обеспечения QNX есть несколько обновлений для QNX 6.5, которые позволят вам обновиться до GCC 4.8.3, что обеспечит вам достойную поддержку C++11. Вам потребуется создать учетную запись на веб-сайте QNX, а затем:

  1. Загрузите Binutils 2.24 для своего хоста (например, win32-binutils-2.24.zip для WIndows) с http://community.qnx.com/sf/frs/do/listReleases/projects.toolchain/frs.binutils.
  2. Загрузите GCC 4.8.3 для своего хоста (например, win32-gcc-4.8.3-qnx65x.zip для Windows) с сайта http://community.qnx.com/sf/frs/do/viewRelease/projects.toolchain/frs.gcc.gccDIR=4.8.38.
  3. Разверните оба архива — это создаст папки host и target.
  4. Скопируйте и вставьте новые папки в папку QNX, перезапишите файлы.
  5. Отредактируйте host/win32/x86/etc/qcc/gcc/default, чтобы изменить компилятор по умолчанию: DIR=4.8.3

При компиляции добавьте следующие флаги:

  • -Vgcc_ntox86_gpp в QCC (для цели x86), чтобы получить заголовки gcc 4.8.3.
  • -Wc,-std=c++11 в QCC, чтобы использовать C++ 11.
person Lubo Antonov    schedule 11.09.2019