web-dev-qa-db-ja.com

macOS Clang C ++ 17ファイルシステムヘッダーが見つかりません

(実験的な)C++17ファイルシステムライブラリを使用してプログラムを作成する必要がありますが、Mac(macOS 10.12.03)clangにはファイルシステムヘッダーが含まれていないようです。

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を使用してコンパイルするExperimental/filesystemを使用しようとしましたが、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

これまでに問題を解決するものを見つけることができなかったので、有益な入力に感謝しています(ただし、間違った用語を検索していた可能性があります)。

さらに情報が必要な場合は喜んで提供しますが、すべてを含めたいと思います。

34
snoato

OS XのC++標準ライブラリであるLibc ++は、仕様が安定していないため、<experimental/filesystem><filesystem>にまだ移動していません。

<filesystem>がClang 6.0リリースに含まれることを願っています。 (編集:5.0を見逃しました)

19
EricWF

Xcode 11 Betaには<filesystem>が含まれるようになりました。 Xcode 10のベータサポートを示す他の回答とは異なり、Appleはこれを リリースノート で言及しています。

リリースノートにも記載されていますが、これはiOS 13、macOS 10.15、watchOS 6、およびtvOS 13でのみサポートされています。

11
Brad Allred

Max Raskinへの返信:2018年7月17日からXcode 10 Beta 4をインストールしましたが、このバージョンには「#include <experimental/filesystem>」または「#include <filesystem>」がありません。

リリースノート もlibc ++ 17 <filesystem>に言及していません。リリースノートdoでは、Xcode 10には<any>、<optional>、および<variant>が記載されています。

ファイルの場所を含める例:

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

6
Jason

編集

別の回答で述べたように、<filesystem>は、Xcode 11ベータで リリースノート に従って利用できます。

Clangは、iOS 13、macOS 10.15、watchOS 6、およびtvOS 13のC++ 17 <filesystem>ライブラリをサポートするようになりました(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>は再び削除されました。 リリースノート には一切言及していません。 <filesystem>を含むXcodeバージョンが(前に述べたBeta 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を更新するたびにこの回避策が破られ、別のコピーが必要になる可能性が非常に高いことに注意してください。また、おそらくベータ版の実装がリリースに含まれなかった正当な理由があります。注意して続行してください...

5
bfx

インクルードは宣言を取得しますが、定義を取得するには-lstdc ++ fs(libstdc ++の場合)またはわからない(libc ++の場合)ともリンクする必要があります。誰かが知っていれば、おそらくこの答えを更新できますか?

Libc ++の場合、-lc++experimentalとリンクする必要があります

2
jvillasante

まだ興味がある人は、Xcode 10 Betaには、experimental/filesystemがあるlibc ++が付属しています

UPDATE Xcode 10.1の出荷に使用されていたXcode 10ベータ版の1つ。

1
Max Raskin

Xcode 9.4をインストール済み-いいえ

しかし、homebrewはllvm 6で救助に来ました

brew update brew install llvm

pATHが変更されたため、私はいなくなりました。

0
DeeDeeCee