找不到macOS Clang C++ 17文件系统头文件

sno*_*ato 37 c++ macos gcc clang c++17

我需要使用(实验性)C++17文件系统库编写程序,但clang在我的Mac(macOS 10.12.03)上似乎没有包含文件系统头.

由于我需要使用C++17,我不能使用像Boost库这样的替代品.

当我尝试编译一个只包含文件系统和iostream(并写入cout)的示例程序时

#include <filesystem>
#include <iostream>
using namespace std;

int main(){
    cout << "test" << endl;
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

>clang test.cpp -std=c++1z

test.cpp:2:10: fatal error: 'filesystem' file not found
#include <filesystem>
         ^
1 error generated.
Run Code Online (Sandbox Code Playgroud)

当我尝试使用GCC 6.3(通过自制软件安装)时,我得到:

>gcc-6 test.cpp  -std=c++17 
test.cpp:2:22: fatal error: filesystem: No such file or directory
 #include <filesystem>
                      ^
compilation terminated.
Run Code Online (Sandbox Code Playgroud)

我也试过使用实验/文件系统而不是编译使用gcc但似乎尝试编译为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
Run Code Online (Sandbox Code Playgroud)

我的铿锵的版本是:

>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
Run Code Online (Sandbox Code Playgroud)

我很感激任何有用的输入,因为到目前为止我找不到解决我问题的任何东西(虽然我可能一直在寻找错误的术语).

如果您需要更多信息,我很乐意提供,但我希望包含所有内容.

Eri*_*cWF 20

Libc ++是OS X上的C++标准库,由于规范不稳定<experimental/filesystem>,<filesystem>尚未转移.

希望<filesystem>将成为Clang 6.0版本的一部分.(编辑:我们错过了5.0)

  • 刚刚安装了Xcode 9.2,仍然没有`<experimental/filesystem>`:( (13认同)
  • 包括`<experimental/filesystem>`可以获得声明,但是要获得定义,你还必须链接`-lstdc ++ fs`(对于libstdc ++)或`我不知道'(对于libc ++).如果有人知道,也许他们可以更新这个答案? (4认同)
  • 遗憾的是文件系统仍然无法使用,因为Xcode缺少它并且boost也错过了规范中的一些功能(例如charset u8string转换).我们所能做的就是等待xcode 9.1或更高版本 (3认同)
  • Xcode 10.1仍然没有文件系统:( (3认同)
  • 我明白了,谢谢:)但是它不应该能够包含<experimental/filesystem>吗? (2认同)
  • Apple向上游libc ++发布变化的速度并不取决于我.Libc ++首先在3.9中发布了"<experimental/filesystem>",但Apple尚未将其作为XCode的一部分发布.如果你想从trunk构建自己的libc ++版本,它将有`<experimental/filesystem>`. (2认同)

Bra*_*red 11

Xcode 11 Beta现在包括<filesystem>。与其他表明Xcode 10支持beta的答案不同,Apple在发行说明中提到了这一点。

发行说明中还提到,仅iOS 13,macOS 10.15,watchOS 6和tvOS 13支持此功能。您将只能std::filesystem用于针对这些版本或更高版本的项目。


小智 6

回答Max Raskin:我已经安装了Xcode 10 Beta 4,从2018年7月17日开始,这个版本没有"#include <experimental/filesystem>"或"#include <filesystem>".

发行说明也没有提到的libc ++ 17的<filesystem>.发行说明确实提到Xcode 10中的以下内容:<any>,<optional>和<variant>.

示例包括文件位置:

/Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/experimental


bfx*_*bfx 5

编辑

发行说明<filesystem>所述,根据发行说明,Xcode 11 Beta中提供了另一个答案:

Clang现在支持<filesystem>适用于iOS 13,macOS 10.15,watchOS 6和tvOS 13 的C ++ 17 库。(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>再次消失。发行说明中没有任何提及。如果您碰巧有一个Xcode版本,其中包含<filesystem>乱码(例如我前面提到的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/
Run Code Online (Sandbox Code Playgroud)

当然,请注意,每次Xcode更新都很可能会破坏此替代方法,并需要另一个副本。而且,可能有充分的理由解释为什么beta版本的实现没有加入到发行版中。谨慎行事...