Почему бета-версия Xcode 11 не может использовать заголовок C ++ 17 <filesystem>? - PullRequest
1 голос
/ 07 июля 2019

Мне нужно использовать заголовок файловой системы C ++ 17 для моего проекта.Насколько я знаю, Apple наконец-то сделала его доступным с Xcode 11 и macOS Catalina.Я использую последнюю (бета-версию 3) Xcode 11 и использую публичную бета-версию macOS Catalina, так что теоретически это должно работать.Но по какой-то причине это не так, и XCode выдает ошибки типа:

'~path' is unavailable: introduced in macOS 10.15

Если я установил стандартную библиотеку C ++ в настройке сборки на libstdc ++ из libc ++, эти сообщения об ошибках исчезли, и я получил предупреждение:

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);
}

1 Ответ

1 голос
/ 08 июля 2019

Продвижение моего комментария в ответ:

У вас случайно не было цели обратного развертывания, более старой, чем macOS 10.15? Это будет выглядеть в вашей командной строке как что-то вроде -mmacosx-version-min=<value>.

@ LouisDionne О, да, это была проблема! Как только я установил цель развертывания 10.15, сборка кода прошла отлично! Я никогда не слышал о целях развертывания, большое спасибо!

Просто чтобы объяснить, что здесь происходит, проблема в том, что поддержка <filesystem> была введена только в Mac OS 10.15. Когда вы используете -mmacosx-version-min=XYZ, вы сообщаете компилятору, что ваша программа должна работать на всех версиях Mac OS вплоть до версии XYZ. Если вы используете версию более раннюю, чем 10.15, мы приятно сообщаем вам во время компиляции, что вы не можете использовать <filesystem>, потому что это будет ошибкой во время выполнения (вероятно, отсутствует символ из libc++.dylib), если вы попытаетесь запустить программу на версия Mac OS старше 10.15.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...