Maison >développement back-end >C++ >Pourquoi est-ce que j'obtiens une erreur d'éditeur de liens lors de l'utilisation de « experimental::filesystem » en C 1z ?

Pourquoi est-ce que j'obtiens une erreur d'éditeur de liens lors de l'utilisation de « experimental::filesystem » en C 1z ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-02 00:55:11422parcourir

Why am I Getting a Linker Error When Using `experimental::filesystem` in C  1z?

experimental::filesystem Linker Error dans C 1z

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 en-tête et l'espace de noms std::filesystem. Jusqu'à ce que cette implémentation atteigne la stabilité, la liaison avec -lstdc fs reste nécessaire pour utiliser ces fonctionnalités.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn