En essayant d'utiliser les dernières fonctionnalités de C 1z au milieu du développement en cours de GCC 6.0, une erreur particulière de l'éditeur de liens se produit lorsque compilation d'un exemple de code impliquant l'en-tête experimental::filesystem.
Le problème se manifeste lors de l'exécution de ce qui suit code :
#include <iostream> #include <experimental/filesystem> namespace fs = std::experimental::filesystem; int main() { fs::path p1 = "/home/pete/checkit"; std::cout << "p1 = " << p1 << std::endl; }
La compilation de ce code entraîne l'erreur suivante :
undefined reference to `std::experimental::filesystem::v1::__cxx11::path::_M_split_cmpts()'
Résolution :
Contrairement à l'hypothèse initiale, le Le système de fichiers TS n'est pas affilié à C 1z mais constitue plutôt une spécification distincte. L'implémentation GCC du Filesystem TS est accessible en mode C 11. Pour résoudre l'erreur de liaison, l'indicateur suivant doit être ajouté à la commande de liaison :
-lstdc++fs
Cette instruction garantit que le programme est lié à la bibliothèque appropriée contenant l'implémentation nécessaire pour l'en-tête experimental::filesystem.
Mise à jour :
Les versions ultérieures de GCC (8.x et supérieures) introduisent la prise en charge du C 17 Bibliothèque du système de fichiers. Il est accessible via le Depuis GCC 9, les composants du système de fichiers C 17 std:: peuvent être utilisés sans -lstdc fs, tandis que std::experimental ::Les symboles du système de fichiers sont rendus disponibles via -lstdc exp dans GCC 13.3. Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!