undefined reference to std::experimental::filesystem
-
./Debug/main.cpp.o
steht da drin, sonst nichts.
-
@Floyd_87 sagte in undefined reference to std::experimental::filesystem:
./Debug/main.cpp.o
steht da drin, sonst nichts.
Na dann kein Wunder. Offenbar hatte das
libstdc++fs
-Häkchen in CodeLite keinen Effekt.Schau mal, ob du in der IDE irgendwo direkt zusätzliche Compiler/Linker-Flags angeben kannst und füge dann
-lstdc++fs
hinzu.Edit: Und schau natürlich dann nochmal in der Ausgabe, dass dann im Compiler-Aufruf zuerst
@"hmpf.txt"
und erst dann-lstdc++fs
steht.
-
Juhu, ihr seid super 1000 Dank
-lstdc++fs muss in den Project Settings (Rechtsklick auf das Projekt in dem TreeView) und dann unter Linker -> Linker Options eingetragen werden (für die zukünftigen googler) und nicht unter Settings -> Build Settings -> Linker Options
Vielen, vielen Dank, jetzt kann ich weitercoden
-
Hallo zusammen,
auch ich möchte das filesystem unter CodeLite benutzen - habe den Chat oben verfolgt und komme einfach nicht drauf, wo ich das -lstdc++fs nun eintragen muss.Wenn ich es wie von Finnegan beschrieben unter Projekt/Linker/Linker Options eintrage,
Projekt / Linker / Linker Options -lstdc++fs
steht beim Programmaufruf nichts davon in der Zeile:
C:\WINDOWS\system32\cmd.exe /C mingw32-make.exe -j 8 -e -f Makefile
"----------Building project:[ CTests - Debug ]----------"
mingw32-make.exe[1]: Entering directory 'C:/MAUS/rat/CTests'gcc -c "C:/MAUS/rat/CTests/main.cpp" -g -O0 -Wall -o ./Debug/main.cpp.o -I. -I.
C:/MAUS/rat/CTests/main.cpp:8:21: error: 'filesystem' is not a namespace-name
namespace fs = std::filesystem;Gibt es irgendwo eine step by step Anleitung, wo genau was stehen sollte???
Dank Euch für Eure Hilfe,
System ist: CodeLite, MinGW 8.2.0-5
-
Das ist bei dir ein Compiler-Fehler, kein Linker-Fehler (die eingetragene Linker-Option ist aber schonmal richtig).
Welchen Header hast du denn dazu eingebunden?Ab C++17 ist die Filesystem library Teil des Standards (und nicht mehr experimentell), dazu müßtest du aber dann dem
gcc
noch die Option dafür mitgeben:-std=c++17
-
Whow bist Du schnell! Dank Dir!
Der Code enthält lediglich:
#include <stdio.h>
#include <iostream>
#include <string>
#include <fstream>
#include <iostream>
#include <filesystem>namespace fs = std::filesystem;
int main(int argc, char **argv)
{...
Nachtrag: Den -std=c++17 Eintrag kann ich leider nicht verwenden... denn dann findet der Compiler zig Fehler in den zugrundeliegenden Files - ich bin echt verzweifelt!C:\WINDOWS\system32\cmd.exe /C mingw32-make.exe -j 8 -e -f Makefile
"----------Building project:[ CTests - Debug ]----------"
mingw32-make.exe[1]: Entering directory 'C:/MAUS/rat/CTests'
gcc -c "C:/MAUS/rat/CTests/main.cpp" -g -O0 -Wall -std=c++17 -o ./Debug/main.cpp.o -I. -I.
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\filesystem:37,
from C:/MAUS/rat/CTests/main.cpp:6:
c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\fs_path.h: In member function 'std::filesystem::__cxx11::path& std::filesystem::__cxx11::path::operator/=(const std::filesystem::__cxx11::path&)':
c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\fs_path.h:237:47: error: no match for 'operator!=' (operand types are 'std::filesystem::__cxx11::path' and 'std::filesystem::__cxx11::path')
|| (__p.has_root_name() && __p.root_name() != root_name()))
~~~~~^
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\iosfwd:40,
from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ios:38,
from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ostream:38,
from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\iostream:39,
from C:/MAUS/rat/CTests/main.cpp:2:
-
Das scheint ein Bug zu sein: #737 can't include <filesystem> with mingw-w64 8.1 .
Kannst du auf eine neuere Version (mit
gcc 9.x
) updaten?
-
Hmm... kann ich versuchen ... melde mich wieder
-
Dank Dir!!!! Fehler ist weg!
Mensch... da saß ich nun Tage und war am Verzweifeln!
Vielen vielen Dank!!!
-
Bitte sehr.