Заголовок macOS Clang С++ 17 не найден

Мне нужно написать программу, используя (экспериментальную) библиотеку C++17 файловой системы, но clang на моем Mac (macOS 10.12.03), похоже, не содержит заголовок файловой системы.

Поскольку я должен использовать C++17, я не могу использовать альтернативы, такие как библиотека Boost.

Когда я пытаюсь скомпилировать примерную программу, которая включает файловую систему и iostream (и записывается на cout)

#include <filesystem>
#include <iostream>
using namespace std;

int main(){
    cout << "test" << endl;
}

Появляется следующее сообщение об ошибке:

>clang test.cpp -std=c++1z

test.cpp:2:10: fatal error: 'filesystem' file not found
#include <filesystem>
         ^
1 error generated.

Когда я пытаюсь использовать GCC 6.3 (устанавливается через homebrew), я получаю:

>gcc-6 test.cpp  -std=c++17 
test.cpp:2:22: fatal error: filesystem: No such file or directory
 #include <filesystem>
                      ^
compilation terminated.

Я также попытался использовать экспериментальную/файловую систему, которая компилируется с помощью gcc, но, похоже, пытается скомпилировать для iOS, приводя к другой ошибке, которая, как представляется, связана с iostream

Undefined symbols for architecture x86_64:
  "std::ios_base::Init::Init()", referenced from:
      __static_initialization_and_destruction_0(int, int) in ccd5QiVt.o
  "std::ios_base::Init::~Init()", referenced from:
      __static_initialization_and_destruction_0(int, int) in ccd5QiVt.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status

Версия моего clang:

>clang --version
Apple LLVM version 8.0.0 (clang-800.0.42.1)
Target: x86_64-apple-darwin16.4.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

Я благодарен за какой-либо полезный вклад, так как я не мог найти ничего, что разрешило мою проблему до сих пор (хотя я, возможно, искал неправильные термины).

Если вам нужна дополнительная информация, я с радостью предоставил ее, но я надеюсь, что все это включило.

Ответ 1

LibС++, которая является стандартной библиотекой С++ на OS X, не переместила <experimental/filesystem> в <filesystem>, но поскольку спецификация нестабильна.

Надеюсь, что <filesystem> станет частью выпуска Clang 6.0. (EDIT: мы пропустили 5.0)

Ответ 2

В ответ Максу Раскину: я установил Xcode 10 Beta 4 от 17 июля 2018 года, и в этой версии нет "#include <экспериментальная/файловая система>" или "#include <файловая система>".

В примечаниях к выпуску также не упоминается lib c++ 17 <файловая система>. В примечаниях к выпуску упоминается, что в Xcode 10 есть: <any>, <option> и <option>.

Пример расположения включаемого файла:

/Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/experimental

Ответ 3

Бета-версия Xcode 11 теперь включает в себя <filesystem>. В отличие от других ответов, указывающих на бета-поддержку в Xcode 10, Apple упоминала об этом в примечаниях к выпуску.

Также упоминается в примечаниях к выпуску, это поддерживается только iOS 13, macOS 10.15, watchOS 6 и tvOS 13.

Ответ 4

Включает в себя объявления, но получите определения, которые вы также должны связать с -lstdС++ fs (для libstdС++), или я не знаю (для libС++). Если кто-то знает, может быть, они может обновить этот ответ?

Для libС++ вам нужно связать с -lc++experimental

Ответ 5

РЕДАКТИРОВАТЬ

Как упомянуто в другом ответе, <filesystem> доступна в Xcode 11 Beta согласно примечаниям к выпуску:

Clang теперь поддерживает библиотеку c++ 17 для iOS 13, macOS 10.15, watchOS 6 и tvOS 13. (50988273)

Здесь, надеясь, что это значит остаться на этот раз!

СТАРЫЙ ОТВЕТ

Только что проверил Xcode 10.2 Beta 4 и у него есть обычная <filesystem> ! Для любопытных, это в /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/.

РЕДАКТИРОВАТЬ:

Загруженный Xcode 10.2 (10E125) aaaaand... <filesystem> снова исчезла. Никаких упоминаний в примечаниях к выпуску. Если у вас есть версия XCode, которая содержит <filesystem> (например, бета-версию 4, о которой я упоминал ранее), копирование файла будет работать нормально:

$ sudo cp /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/filesystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/

Имейте в виду, конечно, что каждое обновление XCode очень вероятно сломает этот обходной путь и сделает другую копию необходимой. Также, вероятно, есть веская причина, по которой бета-версия не попала в релиз. Действовать с осторожностью...

Ответ 6

Если кому-то все еще интересно, бета-версия Xcode 10 поставляется с libc++, который имеет экспериментальную/файловую систему

ОБНОВЛЕНИЕ одной из бета-версий Xcode 10, которые поставлялись вместе с ней, возможно, случайно, в Xcode 10.1, к сожалению, ее нет :(

Ответ 7

Установлен Xcode 9.4 - нет

но доморощенный пришел на помощь с llvm 6

обновление brew установка brew llvm

и с изменением в PATH я был далеко.