web-dev-qa-db-fra.com

en-tête du système de fichiers macOS Clang C++ 17 introuvable

Je dois écrire un programme utilisant la bibliothèque de systèmes de fichiers C++17 (expérimentale), mais clang sur mon Mac (macOS 10.12.03) ne semble pas avoir l'en-tête de système de fichiers inclus.

Comme je suis obligé d'utiliser le C++17, je ne peux pas utiliser d'alternative comme la bibliothèque Boost

Lorsque j'essaie de compiler un exemple de programme qui inclut uniquement le système de fichiers et iostream (et écrit dans cout)

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

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

Je reçois le message d'erreur suivant:

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

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

Lorsque j'essaie la même chose avec GCC 6.3 (installé via homebrew), je reçois:

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

J'ai aussi essayé d'utiliser experimental/filesystem à la place, qui compile avec gcc mais semble essayer de compiler pour iOS, ce qui conduit à une autre erreur qui semble être liée à 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

La version de mon clang est:

>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

Je suis reconnaissant pour toute contribution utile, car je n'ai rien trouvé qui résolve mon problème jusqu'à présent (même si j'aurais peut-être cherché les mauvais termes).

Si vous avez besoin de plus d'informations, je les fournirai volontiers, mais j'espère avoir tout inclus.

23
snoato

Libc ++, qui est la bibliothèque standard C++ sous OS X, n'a pas encore déplacé <experimental/filesystem> vers <filesystem> car la spécification n'est pas stable.

Espérons que <filesystem> fera partie de la version 6.0 de Clang. (EDIT: Nous avons manqué 5.0)

17
EricWF

En réponse à Max Raskin: J'ai installé Xcode 10 Beta 4 à partir du 17 juillet 2018 et cette version ne comporte pas "#include <experimental/système de fichiers>" ou "#include <système de fichiers>".

Les notes de publication ne mentionnent pas non plus libc ++ 17 <système de fichiers>. Les notes de publication do mentionnent que les éléments suivants figurent dans Xcode 10: <tout>, <facultatif> et <variante>.

Exemple d'emplacement de fichier d'inclusion:

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

5
Jason

Y compris vous obtient les déclarations, mais à Obtenez les définitions que vous devez également lier avec -lstdc ++ fs (pour libstdc ++) ou je ne sais pas (pour libc ++). Si quelqu'un sait, peut-être qu'ils pourrait mettre à jour cette réponse?

Pour libc ++, vous devez créer un lien avec -lc++experimental

1
jvillasante

Xcode 9.4 installé - non 

mais homebrew est venu à la rescousse avec LVM 6

mise à jour de la bière brew install llvm

et avec un changement dans PATH, j'étais absent.

0
DeeDeeCee

Si quelqu'un est toujours intéressé, Xcode 10 Beta est livré avec libc ++ avec un système de fichiers expérimental 

0
Max Raskin