VC++ findet Boost - Include nicht



  • Oder:

    Extras => Optionen => Projekte und Projektmappen => VC++ Verzeichnisse (in der Listbox rechts oben Includedateien auswählen)

    Dann gilt der Pfad für alle Projekte.



  • Danke fuer die Antwort, aber bei mir gibt es in dem gesamten Zweig Projekt -> Eigenschaften -> Konfigurationseinstellungen -> C/C++ kein Eintrag, der "Zusätzliche Includeverzeichnisse " heisst ...

    Boese Vermutung: Ich verwende die Express Edition: Ist es dort vielleicht "disabled" ??? ( Wie ich MS kenne, wuerde mich das nicht ueberraschen ...)



  • @matze: Deine "globale" Loesung hat funktioniert! 🙂 Jetzt meldet sich der Linker, dass er die entsprechende lib nicht findet ... ich schaue aber zuerst selber, wenn ich's nicht zusammenbringe, melde mich wieder



  • Ich habe analog zu _matzes's Loesung auch das Directory fuer den Linker eingetragen, also Extras => Optionen => Projekte und Projektmappen => VC++ Verzeichnisse (in der Listbox rechts oben Bibliotheksdateien auswählen).

    So weit so gut. ABER: ich bekomme die Meldung

    LINK : fatal error LNK1104: cannot open file 'libboost_program_options-vc80-mt-gd-1_34_1.lib'

    Ist ja auch kein Wunder, ich habe nachgeschaut in dem lib-Directory, die Datei heisst 'boost_program_options-vc80-mt-gd-1_34_1.lib' ...

    Hat jemand eine Idee, wie ich das korrigieren koennte ???



  • irgendwo nen \ vergessen...

    müsste afaik

    lib\boost_program_options-vc80-mt-gd-1_34_1.lib

    sein..



  • Diogenes77 schrieb:

    Danke fuer die Antwort, aber bei mir gibt es in dem gesamten Zweig Projekt -> Eigenschaften -> Konfigurationseinstellungen -> C/C++ kein Eintrag, der "Zusätzliche Includeverzeichnisse " heisst ...

    Boese Vermutung: Ich verwende die Express Edition: Ist es dort vielleicht "disabled" ??? ( Wie ich MS kenne, wuerde mich das nicht ueberraschen ...)

    Doch, unter C/C++ => Allgemein. Guck mal nach rechts (erster Eintrag). Oder fehlt das wirklich?



  • Neee, hab's nochmals geprueft, als Pfad ist korrekt eingetragen C:\Program Files\boost\boost_1_34_1\lib. Und das File dort heisst
    boost_program_options-vc80-mt-gd-1_34_1.lib

    Und wenn ich es versuchshalber umbenenne in libboost_program_options-vc80-mt-gd-1_34_1.lib, findet es der Linker und meldet success ...



  • @_matze:

    Doch, unter C/C++ => Allgemein. Guck mal nach rechts (erster Eintrag). Oder fehlt das wirklich?

    Sorry, Du hast recht, ich habe mich vorhin verschaut ...



  • Also, das hier beschriebene Problem besteht, ich kann noch immer nicht linken:

    Neee, hab's nochmals geprueft, als Pfad ist korrekt eingetragen C:\Program Files\boost\boost_1_34_1\lib. Und das File dort heisst
    boost_program_options-vc80-mt-gd-1_34_1.lib

    Und wenn ich es versuchshalber umbenenne in libboost_program_options-vc80-mt-gd-1_34_1.lib, findet es der Linker und meldet success ...

    Zusatz: In der boost - Getting-Started-Doku steht:

    In order to choose the right binary for your build configuration you need to know how Boost binaries are named. Each library filename is composed of a common sequence of elements that describe how it was built. For example, libboost_regex-vc71-mt-d-1_34.lib can be broken down into the following elements:

    lib Prefix: except on Microsoft Windows, every Boost library name begins with this string. On Windows, only ordinary static libraries use the lib prefix; import libraries and DLLs do not.6

    Und in der Fussnote 6 steht:

    [6] This convention distinguishes the static version of a Boost library from the import library for an identically-configured Boost DLL, which would otherwise have the same name.

    Ich vermute, irgendwo hier liegt der Hund begraben ...
    (Bei mir heissen aber ALLE libraries boost*.*, OHNE diesen lib-Praefix. )

    Bitte jene unter Euch, die boost && VC++ verwenden, schaut nach, wie Eure Einstellungen sind. Ich bin mit dem Projekt schon sehr unter Zeitdruck ... Und es kann nicht die Loesung sein, dass ich jetzt haendisch alle .lib - Files in lib.lib umbenenne ... 😕



  • Mach mal in den Linker-Einstellungen (wo dein Lib-Pfad steht) hinter den Pfad (am besten hinter alle Pfade, die da stehen) einen doppelten Backslash (\).

    Also z.B.: C:\Program Files\boost\boost_1_34_1\lib\\



  • Hast du boost evtl. mit falschen Einstellungen erstellt?
    Ich benutze VC2005 und bei mir gibt es interessanter weise beide Versionen. Einmal

    boost*vc80*.lib
    und
    libboost*vc80*.lib

    Kann aber daher kommen, weil ich anfangs viel rumgespielt habe.

    Was kriegst du denn für eine Fehlermeldung vom Linker?



  • Für gewöhnlich werden beide Varianten gebaut. Zumindest für die meisten Libs. Kommt darauf an, ob man dynamisch oder statisch linkt (und somit auch, welche CRT man benutzt).



  • //EDIT: Sorry, vorzeitig auf Absenden gedrueckt, daher loesche ich das



  • Danke fuer die Antworten.

    Also ich fasse das Problem zusammen:
    Die Linker-Fehlermeldung ist

    fatal error LNK11004: cannot open file 'libboost_program_options-vc80-mt-gd-1_34_1.lib'

    Das Setting in Visual Studio unter 'Extras -> Optionen -> Projekte und Projektmappen -> VC++ Verzeichnisse' ist

    C:\Program Files\boost\boost_1_34_1\lib\

    Dort sind die Files

    boost_program_options-vc80-mt-gd-1_34_1.lib
    boost_program_options-vc80-mt-gd-1_34_1.dll

    vorhanden.

    Wenn ich nun das File 'boost_program_options-vc80-mt-gd-1_34_1.lib' zu 'libboost_program_options-vc80-mt-gd-1_34_1.lib' kopiere, linkt das Programm. Das bedeutet, die VC++ Settings als Fehlerquelle auszuschliessen sind, der Linker sucht im richtigen Verzeichniss.

    Neue Idee, was das Problem sein koennte: Ich habe im Installer (Download unter http://www.boost-consulting.com/products/free) die "falsche" Variante gewaehlt. (= Multithread Debug DLL) und die enthaelt die geforderte statische Lib einfach nicht. S. auch Zitat aus Boost-Doku:

    On Windows, only ordinary static libraries use the lib prefix; import libraries and DLLs do not.

    Ich will aber eh lieber dynamisch linken. D.h. die (hoffentlich letzte) Frage lautet:

    Wie sage ich's dem VC++ 2005, dass nicht statisch, sondern dynamisch gelinkt werden soll ???



  • Wo genau ist nun dein Problem? 🙂
    Scheint doch alles zu passen...?

    boost_program_options-vc80-mt-gd-1_34_1.lib ist für das dynamische linken gegen boost_program_options-vc80-mt-gd-1_34_1.dll.

    Du musst anders als beim gcc den Lib-Namen extakt angeben. Also boost_program_options-vc80-mt-gd-1_34_1.lib eintragen (er wird nicht versuchen ein lib und ein .a hinzuzufügen, wie der gcc z.B.).

    Probier doch mal aus, wenn du die DLL aus dem Verzeichnis rausnimmst und dann die exe startest. Da sollte ne Fehlermeldung kommen.

    Du musst schon aufpassen, dass wenn du deine Anwendung als Multithreaded-Debug übersetzt, muss auch die DLL mit der selben Einstellung übersetzt werden.

    Oder seh ich das falsch?



  • Vielleicht habe ich nur ein Verstaendnis-Problem:

    Du musst anders als beim gcc den Lib-Namen extakt angeben. Also boost_program_options-vc80-mt-gd-1_34_1.lib eintragen (er wird nicht versuchen ein lib und ein .a hinzuzufügen, wie der gcc z.B.).

    Wo gebe ich den lib-Namen ein?? (Ich habe bisher ihn nirgends eingegeben Ich habe nur die Pfade zu den Include- und den Bibliotheken im VC++ ergaenzt).

    Du musst schon aufpassen, dass wenn du deine Anwendung als Multithreaded-Debug übersetzt, muss auch die DLL mit der selben Einstellung übersetzt werden.

    Wo gebe ich es in VC++ ein, ob ich die App als Multi/Single-threaded- Debug uebersetzen will ??



  • Nachtrag: Das ist mein 1. groesseres Projekt mit C++, wo ich mit Bibliotheken arbeite. Und ich merke, dass ich beim Thema "Wie compilieren und wie linken und gegen welche wie uebersetzte Libs?" nicht sattelfest bin. Kannst Du mir irgendein Tutorial/Quelle nennen, wo ich das beheben kann ???

    Danke fuer Eure Hilfe!! Ich muss jetzt weg, bin morgen wieder online.



  • Bei Boost + MSVC muss man keine Libraries angeben. Das machen die Boost-Headers selber über ein Pragma. Es reicht wenn das LIB-Verzeichnis bekannt ist.

    Schalte deine Runtime auf DLL und alles wird (wenn möglich) auf Boost-DLLs gelinkt. Von manchen Libs gibts keine DLLs, also immer nur statisch. Ich habe beim Linken nie Probleme gehabt. Voraussetzung ist natürlich, das alle LIBs korrekt und vollständig gebaut wurden. Der Rest geht automatisch.



  • @Harrie: Das war die Loesung ! Jetzt funzt es !! 👍
    Danke an alle, wieder was gelernt ... 🙂



  • Du kannst aber auch einfach die statischen libs erstellen. Du musst nur bei bjam als zusätzlichen Parameter --build-type=complete angeben, dann werden auch die libboost*.lib erstellt.


Anmelden zum Antworten