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 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!