std::filesystem mit Clang

  • Ersteller Ersteller CrimsonKing
  • Erstellt am Erstellt am
C

CrimsonKing

Guest
Welche Bibliothek muss man einbinden, um in FreeBSDs Clang (4.0.0 aktuell, scheint es) <filesystem> nutzen zu können? Ich las irgendwas von libc++experimental, aber die gibt es bei mir nicht.

Oder wird das noch nicht unterstützt?

(Unter Windows geht das, auch mit Clang, deswegen sollte mich das eigentlich wundern.)
 
Bei mir geht es mit ``-std=c++14'' einfach so.

Edit: ``c++ -std=c++14 -o test test.cpp'' war die Kommandozeile, der Code der folgende:
Code:
#include <experimental/filesystem>
#include <iostream>

int main() {
  std::experimental::filesystem::path p{"/"};

  std::cout << p << std::endl;
}
 
CMakeLists.txt:

Code:
add_compile_options(-std=c++1z)

--> kompiliert, linkt aber nicht, wie gesagt.
 
Bei GCC brauchst du -stdc++fs, bei clang -lc++experimental. Kann aber sein, dass das in dem clang aus der base nicht enthalten ist, Versuch mal einen aus den ports.
 
In den Ports geht es nur bis clang38, das System hat ja schon 4.0.0. Und das kennt -lc++experimental tatsächlich noch nicht...
 
Der Basissystem-Clang ist kastriert. Ihm fehlen eine Reihe selten genutzter Bibliotheken, um das System nicht noch weiter aufzublähen.
 
Dafür muss man, wenn man es ausgiebig nutzen will, ein zweites Clang installieren? Klingt jetzt nicht sehr effizient.

Ich versuch's mal mit -devel.
 
Die Ports scheinen das tatsächlich nicht zu haben. Ist halt auch etwas ungewöhnlich, weil die STL ja sonst Header-only ist. Sonst gab es eigentlich nur OpenMP was noch gelinkt werden muss und das ist in den Clang-Ports auch immer ziemlich kaputt gewesen (weswegen es jetzt den eigenständigen openmp port gibt).

Zusätzlich verkompliziert wird das Ganze noch dadurch, dass FreeBSD ja die "libcxxrt" als abi-library verwendet, während Clang auf anderen Plattformen "libc++abi" verwendet (und GCC "libsupc++"). Ich kann mir vorstellen, dass das vielleicht zu Problemen beim Portieren von libc++experimental geführt hat und die deswegen nicht in den Builds ist (ich habe auch schon so einige Probleme mit C++11 threading gefunden, die damit zu tun hatten).

Aber am Besten einfach mal beim Port-Maintainer nachfragen. Oder GCC7/8 nehmen.
 
Zurück
Oben