2009-02-26 17 views
4

Dies sollte ein einfaches Problem für Benutzer fortgeschrittener sein als ich bin. :-) Wie verwende ich die Boost-Bibliothek mit Cygwin auf Windows?Verwendung von Boost mit Cygwin unter Windows

Ich programmiere mit g ++ mit Cygwin auf einer WinXP-Maschine. Ich brauche modifizierte Bessel-Funktionen der zweiten Ordnung, also habe ich die neueste Version der Boost-Bibliothek heruntergeladen und in 'c: \ cygwin \ lib \ boost_ 1_ 38_0 \' - Ordner installiert.

Ich versuche, die „example.cpp“ Programm aus dem „getting started“ Abschnitt ihrer Website auszuführen: http://www.boost.org/doc/libs/1_35_0/more/getting_started/unix-variants.html

ich kompilieren bin aus dem Verzeichnis, in dem ich die Beispieldatei erstellt eine einfache Bash-Shell Befehlszeile: 'g ++ -Wall example.cpp'

ich die Meldung erhalte: "boost/Lambda/lambda.hpp: keine solche Datei oder das Verzeichnis"

habe ich versucht, jede mögliche Kombination von -L, -l, -I Optionen in der Befehlszeile zum Einschließen des Verzeichnisses to kein Erfolg. Auch versucht, den Ordner in der PATH-Zeile meines Windows-Systems hinzuzufügen.

Wie verknüpfe ich das/boost-Verzeichnis und ALSO mit allen Unterverzeichnissen? Die Header-Datei 'lambda.hpp' ruft andere Header-Dateien in Unterverzeichnissen auf.

+0

vergessen, das Programm schließen: #include # include #include #include int main() { Verwendung von Namespace boost :: lambda; typedef std :: iStream_iterator in; std :: for_each ( in (std :: cin), in(), std :: cout << (_1 * 3) << ""); } –

+0

Der Link zur neuesten Version des Einstiegsleitfadens lautet: http://www.boost.org/doc/libs/release/more/getting_started/unix-variants.html Sie sind mit 1.35 verbunden. –

Antwort

9

Sie sind wahrscheinlich noch nicht so vertraut mit C++? Es scheint, du verwechselst Begriffe.

C++ - Programme sind in zwei Schritten aufgebaut: Kompilieren und Verknüpfen. Im ersten Schritt wird jede Quelldatei (normalerweise CPP genannt) einzeln behandelt. Jede CPP-Datei verwendet normalerweise mehrere Header, sodass der Compiler diese zuerst einfügt. Deshalb heißt es #include.

Im zweiten Schritt nimmt der Linker alle kompilierten .cpp-Dateien zusammen und erstellt Ihr endgültiges Programm. Einige der kompilierten .cpp-Dateien wurden möglicherweise zuvor zusammengebündelt, wobei das Paket als Bibliothek bezeichnet wird.

Boost ist eine Sammlung von Headern und .cpp-Dateien. Daher müssen Compiler und Linker möglicherweise die Boost-Verzeichnisse finden. Aus Ihrer Fehlermeldung wird deutlich, dass der Compiler-Schritt das Problem ist. Der Linker benötigt keine Header mehr.

Der Compiler wird die #include <boost/lambda/lambda.hpp> Installation sehen. Das bedeutet, dass es wissen muss, wo das erste boost Verzeichnis gefunden wurde. Ich an dieser Stelle würde vermuten, dass der Weg /lib/boost_ 1_ 38_0/include wäre (es gibt immer die find/-name lambda.hpp Schrotflinte appraoch)

+3

+1 für die seltene Geduld, Grundbegriffe für den Laien in kleinen Worten zu erklären - Danke. – Ben

+1

@Ben Problem mit Grundkonzepten, gegen Expertenkonzepte: Jeder kann die Grundbegriffe erklären, aber niemand macht ... mittlerweile die Expertenkonzepte: Jeder versucht diese zu erklären, aber niemand kann es. :) – bordeo

+0

@bordeo - Sie haben es auf den Kopf getroffen! Genie :) Ich könnte das stehlen. Hinzu kommt, dass niemand dumm sein will, indem er ein einfaches Konzept erklärt! – Ben

3

Wenn Sie nicht ganz auf Cygwin vermählt sind, sollten Sie einen Blick auf http://nuwen.net/mingw.html nehmen, die Ihnen eine komplette MinGW C++ Installation mit allen gibt die Bibliotheken (wie Boost) richten sich für Sie ein.

Edit: Ich sollte klar machen, dass Sie diese MinGW Installation zusätzlich zu Cygwin verwenden können, nicht als Ersatz. Stellen Sie nur sicher, dass das MinGW bin-Verzeichnis in Ihrem PATH vor dem Cygwin-Verzeichnis erscheint.

2

Ich denke, Sie brauchen -I /lib/boost_1_38_0 - obwohl das ist ein ziemlich ungewöhnlicher Ort, um es zu sagen. Sie müssen uns wissen lassen, wie Sie es installiert haben, haben Sie es einfach an dem von Ihnen angegebenen Ort entpackt oder haben Sie die Makefiles ausgeführt? Ich nehme an, dass, seit Sie einen Windows-Pfad angegeben haben, Sie ihn nicht in Cygwin installiert haben - was Sie wahrscheinlich tun sollten.Die Anweisungen im Handbuch für den ersten Start von Unix sollten helfen - obwohl keine vorgefertigten bjam herunterladen - es muss mit Cygwin gebaut werden.

Aber wenn Sie mit Cygwin (oder Unix im Allgemeinen) nicht sehr vertraut sind, denke ich, dass Sie es einfacher finden könnten, ein natives Windows-Werkzeug zu verwenden - wie in Neil Butterworth's answer.

1

Vielen Dank für die Informationen, es ist eine nette Einführung in die Verwendung von Bibliotheken mit Cygwin. Daniel hatte Recht. Während jede Änderung einen Fehler gibt, die folgende Zeile (mit Kappen i) ist der Trick:

g ++ -Wall -I/cygdrive/c/Cygwin/lib/boost_1_38_0/example.cpp -o Beispiel

I werde MinGW in den nächsten Tagen auch überprüfen.

p.s. Ich habe einfach Boost in diesen Ordner heruntergeladen und entpackt, aber da ich nur Header-Dateien verwende, muss ich wahrscheinlich nicht mit Cygwin kompilieren. [Die mit cygwin mitgelieferte Boost-Version war 1.33, die anscheinend keine Bessel-Funktionen hat.]

0

Dies ist auf win7 cygwin64 g ++ 5.4 und boost-1.64.7z auf 2017-7. Google zeigt kein nützliches Ergebnis, um mit Boost für Windows zu beginnen (ist Mode nicht mehr in Ordnung?).

Durch das Experimentieren gelang es mir, zu kompilieren und einen Schub Graph Beispielprogramm laufen wie folgt:

:: g++ 5.4 in c:\cygwin64 
    :: 7z extract boost download in c:\tools\boost\boost164 
    > set BOOST_ROOT=c:\tools\boost\boost164 
    > setx BOOST_ROOT c:\tools\boost\boost164 -m 
    > cd %BOOST_ROOT% 
    > bootstrap.sh gcc (the bat files doesn't work) 
    > b2.exe 
    ...failed updating 58 targets... 
    ...skipped 18 targets... 

    ...updated 1123 targets... 

    :: Lots of example here (not ranked highly by google) 
    > mklink /D eg %BOOST_ROOT%/libs/graph/example 

    :: Compiled and run [maxflow code using boost library][1] 
    :: http://vision.csd.uwo.ca/code 
    > unzip ; vi Makefile 
    CPPFLAGS = -I %BOOST_ROOT%/ 
    LDFLAGS = -L%BOOST_ROOT%/stage/lib 
    > make 
    > set PATH=%PATH%;%BOOST_ROOT%/stage/lib 
    > maxflow.exe 
    Flow = 6 
Verwandte Themen