【问题标题】:Why Xcode 11 beta can't use C++17's <filesystem> header?为什么 Xcode 11 beta 不能使用 C++17 的 <filesystem> 标头?
【发布时间】:2019-07-07 18:13:14
【问题描述】:

我需要为我的项目使用 C++ 17 的文件系统头文件。据我所知,Apple 终于在 Xcode 11 和 macOS Catalina 中提供了它。我使用的是最新的(beta 3)Xcode 11,我使用的是 macOS Catalina public beta 2,所以理论上它应该可以工作。但由于某种原因它不是,Xcode 会给出如下错误:

'~path' is unavailable: introduced in macOS 10.15

如果我在 Build Setting 中将 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);
}

【问题讨论】:

  • 你有一个失败的minimal reproducible example,你可以告诉我们吗?你是如何建立你的项目的?也许您需要添加标志(显式或通过切换)以启用 C++17?
  • @Someprogrammerdude 我添加了一个简单的示例代码 sn-p。我将此项目设置为命令行应用程序,并向其中添加了 GoogleTest 和 OpenCV 库以及一些特定于 opencv 的标志。
  • @DonátHorváth "code sn-p" 与 minimal reproducible example 相差甚远 - 这是所要求的。
  • 据我所知,Apple 不再为 Mac OS 提供 libstdc++;所以这真的不应该是 Xcode 中的选择。我会让苹果的人知道。但这并不能回答您的问题。
  • 您是否碰巧指定了早于 macOS 10.15 的后台部署目标?这将在您的命令行上显示为 -mmacosx-version-min=&lt;value&gt;

标签: c++ xcode macos c++17


【解决方案1】:

将我的评论提升为答案:

您是否碰巧指定了早于 macOS 10.15 的反向部署目标?这将在您的命令行上显示为 -mmacosx-version-min=&lt;value&gt;

@LouisDionne 哦,是的,这就是问题所在!一旦我将部署目标设置为 10.15,代码就会完美构建!没听说过部署目标,非常感谢!

只是为了解释这里发生了什么,问题是仅在 Mac OS 10.15 中引入了对 &lt;filesystem&gt; 的支持。当您使用-mmacosx-version-min=XYZ 时,您告诉编译器您的程序应该能够在Mac OS 版本上一直运行,直到版本XYZ。如果您使用早于 10.15 的版本,我们会在编译时很好地告诉您不能使用 &lt;filesystem&gt;,因为如果您尝试在低于 10.15 的 Mac OS 版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-06
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多