(実験的な)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
これまでに問題を解決するものを見つけることができなかったので、有益な入力に感謝しています(ただし、間違った用語を検索していた可能性があります)。
さらに情報が必要な場合は喜んで提供しますが、すべてを含めたいと思います。
OS XのC++標準ライブラリであるLibc ++は、仕様が安定していないため、<experimental/filesystem>
を<filesystem>
にまだ移動していません。
<filesystem>
がClang 6.0リリースに含まれることを願っています。 (編集:5.0を見逃しました)
Xcode 11 Betaには<filesystem>
が含まれるようになりました。 Xcode 10のベータサポートを示す他の回答とは異なり、Appleはこれを リリースノート で言及しています。
リリースノートにも記載されていますが、これはiOS 13、macOS 10.15、watchOS 6、およびtvOS 13でのみサポートされています。
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
編集
別の回答で述べたように、<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を更新するたびにこの回避策が破られ、別のコピーが必要になる可能性が非常に高いことに注意してください。また、おそらくベータ版の実装がリリースに含まれなかった正当な理由があります。注意して続行してください...
インクルードは宣言を取得しますが、定義を取得するには-lstdc ++ fs(libstdc ++の場合)またはわからない(libc ++の場合)ともリンクする必要があります。誰かが知っていれば、おそらくこの答えを更新できますか?
Libc ++の場合、-lc++experimental
とリンクする必要があります
まだ興味がある人は、Xcode 10 Betaには、experimental/filesystemがあるlibc ++が付属しています
UPDATE Xcode 10.1の出荷に使用されていたXcode 10ベータ版の1つ。
Xcode 9.4をインストール済み-いいえ
しかし、homebrewはllvm 6で救助に来ました
brew update brew install llvm
pATHが変更されたため、私はいなくなりました。