it-swarm.com.de

macOS Clang C++ 17 Dateisystemheader nicht gefunden

Ich muss ein Programm schreiben, das die (experimentelle) C++17-Dateisystembibliothek verwendet, aber clang auf meinem Mac (macOS 10.12.03) scheint den Dateisystemheader nicht enthalten zu haben.

Da ich den C++17 verwenden muss, kann ich keine Alternativen wie die Boost-Bibliothek verwenden. 

Wenn ich versuche, ein Beispielprogramm zu kompilieren, das nur das Dateisystem und iostream enthält (und in cout schreibt)

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

int main(){
    cout << "test" << endl;
}

Ich erhalte folgende Fehlermeldung:

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

test.cpp:2:10: fatal error: 'filesystem' file not found
#include <filesystem>
         ^
1 error generated.

Wenn ich dasselbe mit GCC 6.3 (über Homebrew installiert) versuche, bekomme ich:

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

Ich habe auch versucht, experimentelle Dateien/Dateisysteme zu verwenden, die gcc kompilieren, aber für iOS zu kompilieren versuchen, was zu einem anderen Fehler führt, der mit iostream zusammenhängt.

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

Die Version meines Klangs ist:

>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

Ich bin dankbar für hilfreiche Beiträge, da ich bisher nichts gefunden habe, das mein Problem gelöst hat (obwohl ich möglicherweise nach den falschen Begriffen gesucht habe).

Wenn Sie weitere Informationen benötigen, gebe ich Ihnen gerne Auskunft, aber ich hoffe, dass ich alles beigefügt habe.

23
snoato

Libc ++, die C++ - Standardbibliothek unter OS X, hat <experimental/filesystem> noch nicht nach <filesystem> verschoben, da die Spezifikation nicht stabil ist.

Hoffentlich wird <filesystem> Teil der Clang 6.0-Version sein. (EDIT: Wir haben 5.0 verpasst)

17
EricWF

Xcode 11 Beta enthält jetzt <filesystem>. Im Gegensatz zu den anderen Antworten, die auf die Beta-Unterstützung in Xcode 10 hinweisen, hat Apple) dies in den Versionshinweisen erwähnt.

Ebenfalls in den Versionshinweisen erwähnt, wird dies nur von iOS 13, macOS 10.15, watchOS 6 und tvOS 13 unterstützt.

11
Brad Allred

[~ # ~] edit [~ # ~]

Wie in einer anderen Antwort erwähnt, ist <filesystem> In der Xcode 11-Beta gemäß den Versionshinweisen verfügbar:

Clang unterstützt jetzt die C++ 17-Bibliothek <filesystem> Für iOS 13, macOS 10.15, watchOS 6 und tvOS 13. (50988273)

Wir hoffen, dass es diesmal so bleibt!

ALTE ANTWORT

Habe gerade Xcode 10.2 Beta 4 überprüft und es hat regulären <filesystem>! Für die Neugierigen ist es in /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/.

EDIT:

Heruntergeladener Xcode 10.2 (10E125) aaaaund ... <filesystem> Ist wieder weg. Keine Erwähnung in den Release Notes . Wenn Sie zufällig eine Xcode-Version haben, die <filesystem> Enthält (wie die Beta 4, die ich bereits erwähnt habe), scheint das Kopieren der Datei in Ordnung zu sein:

$ 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/

Natürlich wird jedes Xcode-Update diese Problemumgehung mit großer Wahrscheinlichkeit aufheben und eine weitere Kopie erforderlich machen. Auch gibt es wahrscheinlich einen guten Grund, warum die Beta-Implementierung es nicht in die Veröffentlichung geschafft hat . Mit Vorsicht fortfahren...

5
bfx

Antwort an Max Raskin: Ich habe Xcode 10 Beta 4 vom 17. Juli 2018 installiert und diese Version hat nicht "#include <experimental/filesystem>" oder "#include <filesystem>".

Die Versionshinweise erwähnen auch nicht libc ++ 17 <Dateisystem>. In den Versionshinweisen do wird in Xcode 10 Folgendes erwähnt: <any>, <optional> und <variant>.

Beispiel für den Speicherort der Include-Datei:

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

5
Jason

Einschließlich bekommt man die Deklarationen aber zu Holen Sie sich die Definitionen, die Sie auch mit -lstdc ++ fs (für libstdc ++) verknüpfen müssen, oder ich weiß nicht (für libc ++). Wenn jemand weiß, vielleicht Könnte diese Antwort aktualisieren?

Für libc ++ müssen Sie mit -lc++experimental verknüpfen.

1
jvillasante

Installierter Xcode 9.4 - nein 

aber homebrew kam mit llvm 6 zu retten

brüh-Update Brühinstallation llvm

und mit einer Änderung in PATH war ich weg.

0
DeeDeeCee

Wenn noch jemand interessiert ist, wird Xcode 10 Beta mit libc ++ ausgeliefert, das experimentelles/Dateisystem enthält 

0
Max Raskin