boost regex Problem beim Einbinden ins Projekt



  • Hey.

    Ich habe versucht die boost regex lib in mein Projekt mit einzubinden.
    Ich habe die schirtte der nachfolgenden Seite so gemacht wie beschrieben, jedoch beschwert sich der compilier :

    LINK : fatal error LNK1104: Datei "libboost_regex-vc100-mt-gd-1_46_1.lib" kann nicht geöffnet werden.

    http://www.boost.org/doc/libs/1_43_0/more/getting_started/windows.html#build-from-the-visual-studio-ide

    Achso, ich verwende VS 2010.

    Danke schonmal im Voraus



  • Einige der Boost Libraries sind nicht Header- Only und müssen gebuildet werden.
    Entweder machst Du das selbst mit bjam, dem Build-System von Boost oder Du lädst Dir die vorkompilierten Binaries in Form eines Installers herunter:
    http://www.boostpro.com/
    (Webseite ist zur Zeit irgendwie nicht erreichbar.)

    Simon



  • Eben das habe ich schon gemacht...



  • Ist denn die libboost_regex-vc100-mt-gd-1_46_1.lib vorhaden? Hast du den Pfad korrekt in VisualStudio eingetragen?



  • In dem verzeichnuss liegen die ganzen objekt files:

    C:\Program Files (x86)\boost_1_46_1\bin.v2\libs\regex\build\msvc-10.0\release\link-static\threading-multi
    

    In VS habe ich :

    C:\Program Files (x86)\boost_1_46_1
    

    angegeben.

    Und jetzt hab ich mir die ganze objekt und lib files angeschaut , und ich hab mich verlesen. Es ist libboost_regex-vc100-mt-1_46_1 vorhanden, aber libboost_regex-vc100-mt-gd-1_46_1 nicht 😕

    Denn im Verzeichniss :

    C:\Program Files (x86)\boost_1_46_1\boost\regex
    

    Sind ja nur ein paar headerdateien, aber keine lib´s



  • Typischerweise werden libs in den stage\lib Ordner (Unterhalb vom Boost Root Verzeichnis) gebuildet, den musst du VS auch noch bekannt geben. Den Ordner bin.v2 kannst Du löschen.



  • ok, hab nun auch :

    C:\Program Files (x86)\boost_1_46_1\stage\lib
    

    in VS angegeben, leider das selbe Problem.

    libboost_regex-vc100-mt-gd-1_46_1.lib ist in dem Unterverzeichniss "stage\lib" aber vorhnden.

    Sonst noch ne Idee ?



  • Handelt es sich auch um einen DEBUG-build? Wird gegen die RuntimeLibrary dynamisch gelinkt?

    Verwendest du vlt. irgendwo noch andere import/export-settings?

    Include-Verzeichnis richtig angegeben?

    Alternativ mal versucht explizit zu linken (also keine automatic linkage)?



  • inter2k3 schrieb:

    Handelt es sich auch um einen DEBUG-build?

    Auch, aber auch ein RELEASE-build bringt keinen Unterschied.

    inter2k3 schrieb:

    Wird gegen die RuntimeLibrary dynamisch gelinkt?

    Puhh, dass kann ich dir so gar nicht sagen, da ich es nicht weiß.

    inter2k3 schrieb:

    Verwendest du vlt. irgendwo noch andere import/export-settings

    Ich Linke noch die Ws2_32.lib

    inter2k3 schrieb:

    Include-Verzeichnis richtig angegeben?

    Da ich das Verzeichniss in VS direkt über die Ordnerauswähl auswähle, dürfte das schon richtig sein.

    inter2k3 schrieb:

    Alternativ mal versucht explizit zu linken (also keine automatic linkage)?

    Wenn du mir sagt, wie ich das mache, probier ich das gerne mal aus.



  • Darter schrieb:

    inter2k3 schrieb:

    Handelt es sich auch um einen DEBUG-build?

    Auch, aber auch ein RELEASE-build bringt keinen Unterschied.

    An dem d erkennst du, dass es für ein debug-build gedacht ist.

    Darter schrieb:

    inter2k3 schrieb:

    Wird gegen die RuntimeLibrary dynamisch gelinkt?

    Puhh, dass kann ich dir so gar nicht sagen, da ich es nicht weiß.

    Rechte Maustaste auf dein Projekt im Projektmappen-Explorer -> Eigenschaften -> Konfigurationseigenschaften -> C/C++ -> Codegenerierung -> Laufzeitbibliothek

    Darter schrieb:

    inter2k3 schrieb:

    Verwendest du vlt. irgendwo noch andere import/export-settings

    Ich Linke noch die Ws2_32.lib

    Ich dachte eher an die diversen boost-macros.
    Siehe auch: Boost Macro-Reference (auch mal ganz unten auf dieser Seite schauen unter Automatic library selection.

    Darter schrieb:

    inter2k3 schrieb:

    Include-Verzeichnis richtig angegeben?

    Da ich das Verzeichniss in VS direkt über die Ordnerauswähl auswähle, dürfte das schon richtig sein.

    inter2k3 schrieb:

    Alternativ mal versucht explizit zu linken (also keine automatic linkage)?

    Wenn du mir sagt, wie ich das mache, probier ich das gerne mal aus.

    Beispielsweise über rechte Maustaste auf Projekt im Projektmappen-Explorer -> Eigenschaften -> Konfigurationseigenschaften -> Linker -> Eingabe -> Zusätzliche Abhängigkeiten und dort die entsprechende lib eintragen, oder über ein pragma.



  • Wahrscheinlich ist ganz einfach der Pfad (zu den libs) falsch - ist typischerweise DER Fehler der begannen wird.



  • hey.

    Ok, die Laufzeitbibliothek steht auf : Multithreaded-Debug-DLL (/MDd)

    Hmm, ich hab mir das mal angschaut, auf der Seite die du gepostet hast, jeoch verteh ich da nicht viel.

    Algemein verstehe ich in den Headerdateien recht wenig. Ich hab mir das etwas einfacher vorgestellt. Ich bin davon ausgegangen, ich include ich regexp.h und schon kanns los geh, dann sagte man mir, ich soll ein weitere includeverzeichniss angeben, klinkt Logusch, und hab ich auch gemacht, aber wieder FAIL.

    Was ich der Seite entnehmen kann, ich muss ertsmal verhindern, dass die auto_link.hpp includet wird, um per parama die lib direkt zu linken, jedoch finde ich in den vielen headerdateien die stelle wo das geschiet leider nicht.

    Weitere boost-macros verwende ich nicht.



  • Prinzipiell geht das auch so einfach 🙂

    Wo und wie hast du denn die Verzeichnisse (include und lib) gesetzt?
    Und inkludier mal die regex.hpp, nicht die regex.h



  • So, habe die stelle, mit dem auto-link nun gefunden und mal auskommentiert.
    Dann über Parama die lib direkt gelinkt, selber fehler - > kann nicht geöffnet werden.

    Das zusätzliche include verzeichniss hab ich volgendermaßen gesetzt :

    Rechte Maustaste auf mein Projekt im Projektmappen-Explorer -> Eigenschaften -> Konfigurationseigenschaften -> C/C++ -> Allgemein - > Zusätzliche Includeverzeichnisse

    Dort hab ich :

    C:\Program Files %28x86%29\boost_1_46_1
    

    eingeragen, da das mein root-Verzeichniss von boost ist.

    Dann meinte jemand, ich sollte auch noch das Verzeichniss angeben, wo die lib´s liegen, und zwar :

    C:\Program Files %28x86%29\boost_1_46_1\stage\lib
    


  • Gut - die include-Direktive lautet also dann:

    #include <boost/regex.hpp>
    

    Das .../stage/lib Verzeichnis gibst du dann unter Linker->Allgemein->Zusätzliche Bibl.Verzeichnisse an, oder direkt unter VC++-Verzeichnisse->Bibliotheksverz.

    Ansonsten hat vlt. irgendwas nicht geklappt beim lib-build?


Log in to reply