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
Libérer: 2024-12-02 00:55:11
original
502 Les gens l'ont consulté

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;
}
Copier après la connexion

La compilation de ce code entraîne l'erreur suivante :

undefined reference to `std::experimental::filesystem::v1::__cxx11::path::_M_split_cmpts()'
Copier après la connexion

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
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal