#c #g
Вопрос:
я столкнулся проблема с файловой системой библиотеки, он должен быть включен в C 17 компилятор, после 2 дней я пытался установить GCC-7.0.2 в Raspberry Pi, но он не работает, он не распознает команду Оук-7 или G -7 или даже -std=c 17
так мне пришлось установить G -6 и gcc-6, используя apt-get install
в любом случае, после установки 6 версии компилятора включают C 17. я использую кодовые блоки в качестве IDE, мне пришлось добавить новый компилятор и добавить опцию-std=c 17,чтобы включить ее, но в основном коде, когда я включаю библиотеку файловой системы, говорится, что такого файла или каталога нет.
мой вопрос в том, как я могу правильно добавить компилятор c 17 и его библиотеку (например, файловую систему)??
Комментарии:
1. Просто потому, что переключатель говорит «C 17», не означает, что он реализует весь C 17.
2. Более конкретно, он может реализовывать только языковые части. Части библиотеки находятся вне компетенции компилятора.
3. @IgnacioVazquez-Абрамс: Ну, переключатели компилятора также используются для активации частей библиотеки, поскольку они включены в состав компилятора в дистрибутиве. Но вы правы, что libstdc обновляется отдельно от gcc.
4. @Nicol Он вообще не обновляется отдельно: конкретные выпуски GCC довольно тесно связаны с конкретными снимками libstdc . Нумерация версий работает несколько иначе, и обе они разрабатываются полунезависимо (как позволяет реализация языковых функций в компиляторе).
5. @Rick у вас, вероятно, будет два, хотя более новый должен работать в качестве замены старого.
Ответ №1:
GCC v7
по-прежнему не реализует <файловую систему><файловую систему>, но у нее есть Техническая спецификация файловой системы, которая находится в <экспериментальная/файловая система><экспериментальная/файловая система>
#include <experimental/filesystem>
// for brevity
namespace fs = std::experimental::filesystem;
int main()
{
fs::path p = "/path/to/my/file"; // etc...
}
Это также доступно в GCC v6
.
Для связи с библиотекой вам необходимо добавить -lstdc fs
ее в командную строку.
Примечание: Могут существовать некоторые незначительные различия между текущей технической спецификацией и окончательным проектом <файловой системы><файловой системы>, который принимается Комитетом по стандартам.
Примечание 2: GCC v8
теперь реализует <файловая система><файловая система> с -std=c 17
флагом.
Комментарии:
1. так что было правильно, что gcc v7 еще не завершен, в любом случае, добавление экспериментальной/файловой системы работает нормально, спасибо вам за это.
2. Поддержка @shadow для
C 17
не завершена, нет. Главным образом потомуC 17
, что еще не завершена Комитетом по стандартам ISO. Вероятно, после этого потребуется несколько месяцевGCC
, чтобы стать полноценной функцией.3. @Galik Почему GCC не будет завершена к моменту публикации C 17? Проект C 17 дополнялся функциями в течение нескольких месяцев, и если я правильно понимаю процесс стандартизации , он не будет опубликован до 30 октября . На это должно уйти достаточно времени, так как они закончили с основным языком и в основном с библиотекой .
4. @DanielH Согласно записям
std::filesystem
, они не поступалиGCC
доv8.1
тех пор, пока не были опубликованыMay 2018
, то есть более чем через 6 месяцев послеC 17 Standard
публикации. Уже тогда она считалась «экспериментальной» , покаGCC v9.1
не была опубликована вMay 2019
журнале .5. Я использую GCC 9.3 в Ubuntu 20.04 и
<filesystem>
не работал (даже с-std=c 17
флагом). Использование эксперимента сработало благодаря этому ответу.
Ответ №2:
Сначала вам следует взглянуть на поддержку C 17 в GCC
ССАГПЗ 8
Библиотека времени выполнения (libstdc )
- Улучшена экспериментальная поддержка C 17, включая следующие функции:
- Руководства по вычитанию для поддержки вычитания аргументов шаблона класса.
std::filesystem
реализация.std::char_traits<char>
иstd::char_traits<wchar_t>
могут использоваться в постоянных выражениях.std::to_chars
иstd::from_chars
(только для целых чисел, а не для типов с плавающей запятой).
src: https://gcc.gnu.org/gcc-8/changes.html
ССАГПЗ 9
Библиотека времени выполнения (libstdc )
- Улучшена поддержка C 17, в том числе:
- Реализация C 17 больше не является экспериментальной.
- Параллельные алгоритмы и
<execution>
(требуются блоки построения потоков 2018 или новее).<memory_resource>
.- Использование типов и функций в
<filesystem>
не требует привязки к-lstdc fs
now.