Почему в GCC, похоже, нет стандартной библиотеки файловой системы?

#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.

src: https://gcc.gnu.org/gcc-9/changes.html