web-dev-qa-db-ja.com

Xcode 11ベータがC ++ 17の<filesystem>ヘッダーを使用できないのはなぜですか?

プロジェクトにC++ 17のファイルシステムヘッダーを使用する必要があります。私の知る限り、AppleはついにXcode 11とmacOS Catalinaで利用できるようになりました。私は最新の(ベータ3)Xcode 11を使用しており、macOS Catalina public beta 2を使用しています。理論的には動作するはずですが、何らかの理由で動作せず、Xcodeは次のようなエラーを出します。

'~path' is unavailable: introduced in macOS 10.15

ビルド設定でC++標準ライブラリをlibc ++からlibstdc ++に設定すると、これらのエラーメッセージが表示されなくなり、警告が表示されます。

include path for stdlibc++ headers not found; pass '-stdlib=libc++' on the command line to use the libc++ standard library instead 

さまざまなファイルでiostreamとcstddefが欠落しているエラーのトン。ファイルシステムを機能させるにはどうすればよいですか?

編集:最小限のコード例

#include <filesystem>
#include <iostream>
#include <string>

bool isPathDir(std::string pathString);

int main(int argc, char *argv[])
{
    std::string pathString = "../test.jpg";
    if (isPathDir(pathString)) {
        std::cout << "This is a directory!" << std::endl;
    } else {
        std::cout << "This is not a directory" << std::endl;
    }
}

bool isPathDir(std::string pathString)
{
    std::filesystem::path path(pathString);
    return std::filesystem::is_directory(path);
}
10
Hordon

私のコメントを回答に昇格する:

MacOS 10.15より古いバックデプロイメントターゲットが指定されていますか?これは、コマンドラインでは-mmacosx-version-min=<value>のように表示されます。

@LouisDionneああそう、それが問題でした!デプロイメントターゲットを10.15に設定するとすぐに、コードは完全にビルドされます。これまで配備目標について聞いたことがありません、ありがとうございました!

ここで何が起こっているのかを説明するために、問題は<filesystem>のサポートがMac OS 10.15でのみ導入されたことです。 -mmacosx-version-min=XYZを使用する場合は、プログラムがバージョンXYZまでのバージョンのMac OSで実行できるようにコンパイラーに指示します。 10.15より古いバージョンを使用している場合は、コンパイル時に<filesystem>を使用できないことを通知します。これは、Macのバージョンでプログラムを実行しようとすると、ランタイムエラー(libc++.dylibに記号がない可能性があります)になるためです。 10.15より古いOS。

7
Louis Dionne