Hor*_*don 11 c++ macos xcode c++17
我需要为我的项目使用 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
Run Code Online (Sandbox Code Playgroud)
如果我将 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
Run Code Online (Sandbox Code Playgroud)
以及在各种文件中缺少 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);
}
Run Code Online (Sandbox Code Playgroud)
将我的评论提升为答案:
您是否碰巧有一个早于指定的 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。
| 归档时间: |
|
| 查看次数: |
3402 次 |
| 最近记录: |