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
Patricia ArquetteOriginal
2024-12-02 00:55:11415Durchsuche

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;
}

Das Kompilieren dieses Codes führt zu folgendem Fehler:

undefined reference to `std::experimental::filesystem::v1::__cxx11::path::_M_split_cmpts()'

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

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!

Stellungnahme:
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