Heim > Backend-Entwicklung > C++ > Warum erhalte ich einen Linker-Fehler, wenn ich „experimental::filesystem' in C 1z verwende?

Warum erhalte ich einen Linker-Fehler, wenn ich „experimental::filesystem' in C 1z verwende?

Patricia Arquette
Freigeben: 2024-12-02 00:55:11
Original
466 Leute haben es durchsucht

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

experimental::filesystem Linker-Fehler in C 1z

Beim Versuch, die neuesten C 1z-Funktionen inmitten der laufenden Entwicklung von GCC 6.0 zu nutzen, tritt ein eigenartiger Linker-Fehler auf, wenn Kompilieren eines Beispielcodes mit dem Header „experimental::filesystem“.

Das Problem tritt beim Ausführen von auf folgender 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;
}
Nach dem Login kopieren

Das Kompilieren dieses Codes führt zu folgendem Fehler:

undefined reference to `std::experimental::filesystem::v1::__cxx11::path::_M_split_cmpts()'
Nach dem Login kopieren

Lösung:

Entgegen der ursprünglichen Annahme, Das Dateisystem TS ist nicht mit C 1z verbunden, sondern stellt eine eigenständige Spezifikation dar. Auf die GCC-Implementierung des Dateisystem TS kann im C 11-Modus zugegriffen werden. Um den Verknüpfungsfehler zu beheben, sollte dem Verknüpfungsbefehl das folgende Flag hinzugefügt werden:

-lstdc++fs
Nach dem Login kopieren

Diese Anweisung garantiert, dass das Programm eine Verknüpfung mit der entsprechenden Bibliothek herstellt, die die erforderliche Implementierung für den experimentellen::filesystem-Header enthält.

Update:

Nachfolgende Versionen von GCC (8.x und höher) führen Unterstützung für C ein 17 Dateisystembibliothek. Der Zugriff erfolgt über das Header und den std::filesystem-Namespace. Bis diese Implementierung Stabilität erreicht, bleibt die Verknüpfung mit -lstdc fs erforderlich, um diese Funktionen zu nutzen.

Ab GCC 9 können die C 17 std::filesystem-Komponenten ohne -lstdc fs verwendet werden, während std::experimental ::Dateisystemsymbole werden über -lstdc exp in GCC 13.3 verfügbar gemacht.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich einen Linker-Fehler, wenn ich „experimental::filesystem' in C 1z verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage