2015-04-29 13 views
11

Ich habe seit Tagen versucht, Boost für die Arbeit mit meiner Visual Studio 2013 Premium-Installation zu bekommen. Ich habe es mit einer Zip-Installation ausprobiert und jetzt mit NuGet. Beide Methoden haben mich zum selben Punkt eines Linker-Fehlers gebracht.VS2013 Boost mit NuGet

Der Fehler: 1> LINK: fatal error LNK1104: Datei kann nicht geöffnet 'libboost_system-vc120-mt-gd-1_57.lib'

ich für Schub durch die Mailing-Liste gesucht und gefunden jemand eines ähnlich die Problem, aber das war ab 2012 mit boost_1_54_0 oder so, also überhaupt nicht relevant für VS2013 oder boost 1_58_0.

Ich habe auch ein paar Forenbeiträge, einschließlich SO, angeschaut, aber keiner von ihnen hat das gleiche Problem, das ich habe. Entweder das oder sie haben einfach keine Antworten.

Ich kann keine der Flags erkennen, die der Fehler zeigt, da dies das erste Mal ist, dass ich etwas anderes als STL-Bibliotheken oder meine eigenen Header verwende.

Alle und alle Hilfe wäre willkommen, lassen Sie mich wissen, wenn es andere zusätzliche Informationen, die hilfreich wären.

Antwort

15

Ich vermute, dass Sie die NuGet Paket einfach "Boost" genannt installiert. Dies scheint alle Boost-Header zu enthalten, aber keine kompilierten Bibliotheken. Das ist in Ordnung, wenn Sie nur die Header-Only-Boost-Bibliotheken (d. H. Die meisten davon) verwenden möchten.

Was Sie wirklich wollen, ist das Paket namens "boost-vc120" (vc120 bezieht sich auf VC++ 12.0, das ist die VC++ Version, die mit VS2013 ausgeliefert wird). Dies hat auch alle Bibliotheken. Sie werden feststellen, dass die Installation viel länger dauert.

In beiden Fällen kümmert sich NuGet um die Einrichtung aller notwendigen VC++ - Verzeichniseinstellungen. Es ist keine weitere Konfiguration erforderlich.

+0

Ich habe gerade das boost-vc120-Paket installiert und es schien zu funktionieren. Ich vermied es anfangs, weil ich die Beschreibung falsch gelesen habe und gedacht habe, dass ich "Windows XP" gesehen habe. Ich habe beide Boost und die Boost-VC120-Pakete auf meiner aktuellen Lösung. Wird das irgendwas beeinflussen, wenn ich den normalen Boost entferne? – user3857017

+0

@ user3857017 - Entfernen Boost sollte keine Wirkung haben, aber wenn es tut, können Sie boost-vc120 auch immer entfernen und dann neu installieren. – Ferruccio

+0

In Ordnung. Ich frage nur, weil Boost ein ziemlich großes Paket ist, um einfach ohne Grund dort sitzen zu bleiben. – user3857017

0

Existiert die Datei libboost_system-vc120-mt-gd-1_57.lib auf Ihrer Festplatte?

Wenn ja, haben Sie die .lib zum Linker/input/Additional Dependencies hinzugefügt?

enter image description here

+0

Ich habe nie gedacht, dort zu suchen, nur links in der Klasse, aber wenn ich zurückkomme, werde ich überprüfen. Momentan verwende ich nur das, was NuGet installiert und mit Boost installiert. – user3857017

+1

Der Name der Bibliotheksdatei muss dieser Liste nicht hinzugefügt werden. In MSVC verwenden die Boost-Header die Anweisungen '#pragma comment (lib," ... ")', um die Bibliotheksnamen automatisch anzugeben. Wichtig ist, dass Sie das * Verzeichnis * mit allen Boost '.lib' Dateien zu' Linker -> Allgemein -> Weitere Bibliotheksverzeichnisse' hinzufügen. – bogdan

+0

Ich habe es nicht geschafft, die Datei zu finden, aber ich habe es über das andere Boost-Paket in der anderen Antwort funktioniert. Trotzdem danke! – user3857017

2

Die Struktur der Boost NuGet-Pakete ist here. Sie können boost-vc120 verwenden, aber es wird alle Boost-Bibliotheken in Ihr Projekt herunterladen. Wenn Sie also Speicherplatz sparen möchten, verwenden Sie das Paket boost, das Ihnen Header-Dateien und spezifische Binärpakete liefert. In Ihrem Fall ist es boost_system-vc120.

Sie können das Boost-Paket nicht entfernen, da Binärpakete wie boost-vc120/boost_system-vc120 davon abhängen.

+1

'boost-vc120' lädt alle Boost-Bibliotheken herunter, aber es verbindet nur die Bibliotheken, die Sie tatsächlich in Ihrem Projekt verwenden. Boost nutzt die VC++ '# pragma comment (lib)' - Anweisung in seinen Headern, um anzugeben, welche Bibliotheken verknüpft werden müssen. – Ferruccio

+0

Natürlich habe ich die Antwort korrigiert. Vielen Dank. –