2009-11-20 14 views
11

Ich versuche eine Anwendung zu erstellen, die von Boost abhängt. Also habe ich Boost 1_41_0 in meine Linux-Box heruntergeladen und den Anweisungen auf der Boost-Site für Unix-Varianten http://www.boost.org/doc/libs/1_41_0/more/getting_started/unix-variants.html gefolgt.Building Boost unter Linux - Bibliotheksnamen

Sie im Grunde vorschlagen, dass ich laufen ./bjam installieren, was ich getan habe. Der Build wurde erfolgreich abgeschlossen. Die Bibliotheksnamen scheinen jedoch nicht mit der Boost-Namenskonvention übereinzustimmen, die sowohl in der obigen Dokumentation als auch im Makefile der Anwendung beschrieben ist, die ich erstellen möchte.

Ich bemerkte, dass es eine Reihe von Optionen gibt, die ich angeben kann, um zu bjam und ich habe versucht, mit denen zu spielen, aber egal was passiert, ich kann nicht scheinen, es richtig zu machen. Nach meinem Verständnis sollten die Bibliotheken in das Verzeichnis $ BOOST_ROOT/lib gehen. Dies ist, wo die Bibliotheken zeigen, aber genannt:

libboost_thread.a 
libboost_thread.so 
libboost_thread.so.1.41.0 

Ich würde erwarten, dass sie libboost_thread-gcc41-mt-d-1_41_0 oder etwas ähnliches genannt werden.

Ich habe versucht ./bjam --build-type = complete --layout = markiert, und ich sehe:

libboost_thread.a 
libboost_thread-mt.a 
libboost_thread-mt-d.a 
libboost_thread-mt-d.so 
libboost_thread-mt-d.so.1.41.0 
libboost_thread-mt-s.a 
libboost_thread-mt-sd.a 
libboost_thread-mt.so 
libboost_thread-mt.so.1.41.0 
libboost_thread.so 
libboost_thread.so.1.41.0 

Also, ich bin nicht sicher, ob ich sollte nur meine -L Verzeichnis machen Bühne? Gibt es Unterlagen, die das genauer beschreiben?

Antwort

7

Die Namen in 1.40.0 geändert wurde - siehe in release notes:

Build System

Der Standard Benennung von Bibliotheken in Unix-ähnliche Umgebung passt jetzt System Konventionen und nicht schließen Sie verschiedene Dekorationen ein.

Sie haben wahrscheinlich vergessen, diesen Teil in der Build-Dokumentation zu aktualisieren.

2

Hier sind zwei Variablen. Erstens ist "Installieren" vs. "Bühne" (Standard). "install" kopiert sowohl Bibliotheken als auch Header standardmäßig in ein Verzeichnis -/usr/local, und Sie können dann den Quellbaum entfernen. "stage" stellt Bibliotheken auf "stage/lib" und Sie sollten "-L/stage/lib -I" -Flags hinzufügen.

Zweitens ist --layout = versioniert und --layout = System. Es scheint, als hättest du entdeckt, was sie bereits tun, und tatsächlich ist System seit 1.40 Standard. Der Erste Schritte Guide erwähnt dies nicht, und ich habe ein Aktionselement hinzugefügt, um es zu aktualisieren. Im Idealfall sollten Sie mit den Autoren der Anwendung sprechen, um die Systembenennung von Boost-Bibliotheken zu verwenden. Wenn das nicht möglich ist, ist das Bauen mit --layout = versioned die einzige Option.

1

Von der Boost-Dokumentation bei http://www.boost.org/doc/libs/1_35_0/more/getting_started/windows.html#library-naming ist die Konvention:

-mt Threading-Tag: zeigt an, dass die Bibliothek mit Multithreading-Unterstützung aktiviert gebaut wurde. Bibliotheken, die ohne Multithreading-Unterstützung erstellt wurden, können durch das Fehlen von -mt identifiziert werden.

-d ABI-Tag: codiert Details, die sich auf die Interoperabilität der Bibliothek mit anderem kompiliertem Code auswirken.Für jede solche Funktion wird ein einzelner Brief an den Tag hinzugefügt:

 
Key  Use this library when: 
s linking statically to the C++ standard library and compiler runtime support libraries. 
g using debug versions of the standard and runtime support libraries. 
y using a special debug build of Python. 
d building a debug version of your code. 
p using the STLPort standard library rather than the default one supplied with your compiler. 
n using STLPort's deprecated “native iostreams” feature. 

Zum Beispiel, wenn Sie eine Debug-Version des Codes für die Verwendung mit Debug-Versionen der statischen Laufzeitbibliothek und der STLPort Standard-Bibliothek in „bauen native iostreams "-Modus wäre das Tag: -sgdpn. Wenn keine der obigen Bedingungen zutrifft, wird das ABI-Tag weggelassen.

+1

Wie baut man einen Boost mit Multithreading-Unterstützung? Boost's [Installation] (http://www.boost.org/doc/libs/1_54_0/doc/html/bbv2/installation.html) erwähnt es nicht. – jww

+2

Verwenden Sie beim Erstellen von Boost: ./b2 --build-type = complete --layout = versioniert Dadurch wird jede Version jeder Bibliothek generiert, einschließlich der Multithread-Bibliotheken. – Riot

+1

Danke Riot. Von [anderen Diskussionen] (http://stackoverflow.com/questions/2293962/boost-libraries-in-multithreading-aware-mode) in Stack Overflow scheint Boost standardmäßig multi-threaded zu sein. Wenn ich also "./B2" spiele, dann bekomme ich Multi-Threading ohne Dekorationen. Ist das nicht der Fall? – jww