Boost library "filesystem" einbinden



  • Hallo.

    Zunächst vorweg, ich habe (bisher) noch nicht all zu viel Erfahrungen mit C++ sammeln dürfen, aber was nicht ist kann ja noch werden...

    Also ich habe mir die Boost Bibliothek heruntergeladen und die Pfade in MSVC nach Anleitung hoffentlich richtig gesetzt ...
    Nun wollte ich boost::filesystem benutzen. So dass ich mir also die Bibliotheksdateien nach Anleitung erzeugt habe, d.h. ich habe neben einigen anderen Dateien auch diese erhalten: "boost_filesystem-iw-mt-1_35.lib"

    Wenn ich nun mein Programm erzeugen will in dem ich mittels

    # include <boost/filesystem.hpp>
    

    die Bibliothek eingebunden habe bekomme ich die Fehlermeldung dass der Linker die Datei

    libboost_filesystem-iw-mt-gd-1_35.lib
    

    nicht finden konnte, klar weil sie existiert ja nicht, nur wie erzeuge ich nun diese Datei mit den Parametern "-gd" die ja auch so schön in der Boost-Doku erklärt sind?
    Oder muss man da was an den Linkereintsellungen ändern? Wenn ja wie?

    Vielen Dank im Voraus!!
    Andi



  • Also, wenn du ne zip, oder so hast im Ordner, dann musst du die zuerst noch entpacken. War bei mir zumindest so.
    Dann sollte das gehen.



  • Danke für die schnelle Antwort, also die Datei "boost_filesystem-iw-mt-1_35.lib" und weitere liegen in dem Ordner

    .\boost_1_35_0\libs\filesystem\build\intel-win\release\threading-multi
    

    so wie ich sie mit bjam erzeugt habe. Die Befehle die ich benutzt habe waren:

    bjam ^
    --build-dir="D:\Users\Vorname\Documents\Programmierung\C++\Bibliotheken\boost_1_35_0\built-boost" ^
    --toolset=intel
    

    Ich denke mein Problem ist, dass ich diese wohl mit bjam mit den falschen Parametern erzeugt habe, denn der Compiler bzw. wohl eher der Linker sucht nicht nach "boost_filesystem-iw-mt-1_35.lib" sondern nach "libboost_filesystem-iw-mt-gd-1_35.lib", die ich leider nicht habe ...
    Oder ich muss dem Linker irgendwie erklären das er die richtige Datei sucht ...



  • Hier gibts für die Boost Bibliothek einen Installer für MSVC.



  • Was ich vielleicht hätte dazu schreiben sollen, ich verwende (aus diversen Gründen) den Intel-Compiler 10.1.022 und nicht den von MSVC... damit fällt also boostpro computing flach. Oder??





  • Na super, den Link kannte ich vorher auch schon!! Sonst hätt ich ja die Bibliothek erst gar nicht erstellen können. Wie gesagt ich habe nach obiger Anleitung die Bibliothek erzeugen können, aber leider erhalte ich Dateien mit dem Namen "boost_filesystem-iw-mt-1_35.lib" und nicht wie es sich der Linker? wünscht in der Form "libboost_filesystem-iw-mt-gd-1_35.lib"

    Ich benutzte übrigens den Intel Compiler 10.1.022 und ich habe den folgenden Befehl zum erzeugen der lib verwendet:

    bjam --build-dir="[..]\boost_1_35_0\built-boost" --toolset=intel
    

    Für hilfreiche Antworten wäre ich sehr dankbar!!



  • Sorry, habe den Befehl

    bjam --build-dir="[..]\boost_1_35_0\built-boost" --toolset=intel-10.1.022
    

    verwendet.

    Vielen Dank schon mal im Voraus!!



  • Na super, den Link kannte ich vorher auch schon!!

    Ganz ruhig bleiben, brauner!

    Sorry, habe den Befehl
    bjam --build-dir="[..]\boost_1_35_0\built-boost" --toolset=intel-10.1.022

    Ehm... ist überhaupt eine Versionsnummernangabe richtig?

    On Windows, append a version number even if you only have one version installed (unless you are using the msvc or gcc toolsets, which have special version detection code) or auto-linking will fail.

    Weiterhin, er wünscht libboost_filesystem-iw-mt-gd-1_35.lib?
    http://www.boost.org/doc/libs/1_35_0/more/getting_started/windows.html#library-naming
    Würde mal sagen:

    On Windows, only ordinary static libraries use the lib prefix

    Linke mal dynamisch.
    Und gd hat was mit Debug zutun, versuch also mal

    bjam --build-dir="[..]\boost_1_35_0\built-boost" --toolset=intel-10.1 debug release
    

    Damit sowohl debug als auch release gebaut werden. Meiner Meinung nach sollte das aber auch reichen (wenn man das Kommando in dem Boost-Directory aufruft!):

    bjam --toolset=intel-10.1 install
    


  • Zunächst einmal Dankeschön!!

    Mit

    bjam --toolset=intel-10.1 install
    

    erhalte ich dass selbe wie zuvor ... nur halt in nem anderen Ordner ...
    ABER mit

    bjam --build-dir="[..]\boost_1_35_0\built-boost" --toolset=intel-10.1 debug release
    

    erhalte ich nun auch die Dateien mit den Parametern "-gd", also bspw "boost_filesystem-iw-mt-gd-1_35.lib" damit fehlt mir jetzt aber noch das "lib" am Anfang.
    Einfaches umbenennen scheint es jedenfalls nicht zu tun. Oder muss man noch was anderes machen als unter Konfigurationseigenschaften -> Linker -> Additional library directories das folgende "[..]\boost_1_35_0\libs" anzugeben?

    Heißt nicht gerade

    On Windows, append a version number even if you only have one version installed (unless you are using the msvc or gcc toolsets, which have special version detection code) or auto-linking will fail.

    dass wenn man die Versionsnummer weglässt es unter Windows zu "Problemen" kommt? DEnn gerade auf Grund dieses Kommentares in dem Getting Started habe ich ja die Versionsnummer angehängt.



  • Na, wie von mir zitiert, heißt lib-präfix, das es sich um statische Libs handelt. Das umbenennen von dynamischen Libs (ohne lib-präfix), macht also keinen Sinn!

    Warum er jetzt bei dir keine statischen Libs baut, weiß ich nicht (benutze selber MSVC, und dort baut bjam mit install alle Varianten).

    Aber schau mal hier, dort steht was zum dynamischen und statischen linken:
    http://www.boost.org/doc/libs/1_35_0/libs/filesystem/doc/index.htm#Building

    Ansonst bleibt dir wohl nichts übrig, als dynamisch zu linken, wenn du die statische Lib nicht bauen kannst. Oder am besten in der boost-Mailingliste fragen! Vielleicht ist es ein bekanntes Phänomen?



  • Hallo,

    Häng mal bei der bjam-Commandline ein

    --build-type=complete

    mit rein.



  • Vielen vielen Dank!! Mit dem folgenden Befehl klappt es bei mir:

    bjam --build-dir="[..]\boost_1_35_0\built-boost" --build-type=complete --toolset=intel-10.1 debug release
    

    Dass heißt ich erhalte nun die Datei die der Linker sucht, allerdings findet er sie leider nicht. Ich habe nach Anleitung unter "Konfigurationseigenschaften" -> "Linker" -> "Additional library directories" das folgende "[..]\boost_1_35_0\libs" angegeben. Oder muss ich irgendwo anders noch was machen??

    Die Datei liegt übrigens in "[..]\boost_1_35_0\libs\filesystem\build\intel-win-10.1\debug\link-static\threading-multi".



  • Willst du wirklich programmieren? 🙄 Ein Grundverständnis für die FUnktionsweise eine Computers sollte meiner meinung schon da sein.
    Wenn die Datei in Verzeichnis /X liegt, aber der Linker nur Verzeichnis /Y kennt, wie soll er dann bitte die Datei in /X finden? 🙄

    Denke nochmal genau darüber nach!

    Übrigens, mit install werden alle Lib-Dateien in einen Zielordner kopiert... nur mal so als Tip.



  • Übrigens, wenn du MSVC benutzt, kannst du auch die Lib-Datei in das Projekt hinzufügen. Dann sind gar keine Pfade mehr nötig. Ist zwar ne knallharte Methode, die nicht immer erwünscht ist, aber viele Wege führen nach Rom.



  • Wenn bjam da so eine schöne Ordner-Struktur schafft kann man ja unter Umständen davon ausgehen, dass der Linker dann damit auch klar kommt.

    Der Vollständigkeit halber an alle die das hier lesen und die selben Probleme haben: Habe alle *.lib in ein Verzeichnis gepackt und dieses dem Linker als Parameter übergeben... und so funktioniert das dann auch.

    @BarnieGeroellheimer: Danke für die Hilfe, aber nur weil du wohl scheinbar etwas mehr Ahnung von C++ hast, brauchst du hier nicht rumprollen, persönliche Beleidigungen sind ja wohl unter aller Kanone. Wenn du keinen Bock hast auf Forum-Fragen ordentlich zu antworten, dann lass es ... Foren sind halt ein Mittel Wissen zu teilen ...


Anmelden zum Antworten