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. 🙂


Anmelden zum Antworten