2015-04-29 5 views
11

Ho cercato per giorni di ottenere il massimo per lavorare con la mia installazione di Visual Studio 2013 Premium. L'ho provato con un'installazione zip e ora con NuGet. Entrambi i metodi mi hanno portato allo stesso punto di un errore del linker.VS2013 Boost con NuGet

l'errore: 1> LINK: Errore irreversibile LNK1104: impossibile aprire il file 'libboost_system-vc120-mt-gd-1_57.lib'

ho guardato attraverso la mailing list per boost e trovato qualcuno la pubblicazione di un simile problema, ma era del 2012 con boost_1_54_0 o qualcosa del genere, quindi non rilevante per VS2013 o boost 1_58_0.

Ho anche guardato alcuni post del forum, incluso SO, ma nessuno di loro ha lo stesso problema che sto avendo. O quello, o semplicemente non hanno risposte.

Non riesco davvero a distinguere nessuno dei flag che l'errore mostra perché questa è la mia prima volta che uso qualsiasi cosa diversa dalle librerie STL o dalle intestazioni personali.

Qualsiasi e ogni aiuto sarebbe apprezzato, fammi sapere se ci sono altre informazioni aggiuntive che potrebbero essere utili.

risposta

15

ho il sospetto è stato installato il pacchetto di NuGet chiamato semplicemente "boost". Questo sembra contenere tutte le intestazioni di Boost, ma nessuna libreria compilata. Va bene se sei interessato a utilizzare solo le librerie Boost solo per l'intestazione (ad esempio la maggior parte di esse).

Ciò che si desidera veramente è il pacchetto denominato "boost-vc120" (vc120 si riferisce a VC++ 12.0, che è la versione VC++ fornita con VS2013). Questo ha anche tutte le librerie. Noterai che ci vorrà molto più tempo per l'installazione.

In entrambi i casi, NuGet si occuperà di configurare tutte le impostazioni necessarie per le directory di VC++. Non è necessaria alcuna ulteriore configurazione.

+0

Ho appena installato il pacchetto boost-vc120 e sembrava funzionare. Inizialmente l'ho evitato perché ho letto male la descrizione e ho pensato di vedere "Windows XP". Ho entrambi i pacchetti boost e vc120 sulla mia attuale soluzione. Ciò influenzerà qualsiasi cosa se rimuoverò la spinta regolare? – user3857017

+0

@ user3857017 - rimuovere boost non dovrebbe avere alcun effetto, ma se lo si può sempre rimuovere anche boost-vc120 e quindi reinstallarlo. – Ferruccio

+0

OK. Chiedo solo perché boost è un pacchetto abbastanza grande da lasciare lì seduto senza motivo. – user3857017

0

Il file libboost_system-vc120-mt-gd-1_57.lib esiste sul disco rigido?

In caso affermativo, è stato aggiunto il .lib al linker/input/dipendenze aggiuntive?

enter image description here

+0

Non ho mai pensato di guardare lì, appena andato in classe ma quando torno controllerò. Attualmente sto solo usando qualsiasi cosa NuGet imposta e installa con boost. – user3857017

+1

Il nome del file della libreria non deve essere aggiunto a tale elenco. Su MSVC, le intestazioni boost usano le direttive '#pragma comment (lib," ... ")' per specificare automaticamente i nomi delle librerie. L'importante è aggiungere la * directory * contenente tutti i file boost '.lib' su' Linker -> Generale -> Directory di libreria aggiuntive'. – bogdan

+0

Non sono riuscito a trovare il file, ma l'ho fatto funzionare tramite l'altro pacchetto boost nell'altra risposta. Grazie comunque! – user3857017

2

La struttura dei pacchetti Boost NuGet è here. Puoi usare boost-vc120 ma scaricherà TUTTE le librerie di boost per il tuo progetto. Pertanto, se si desidera risparmiare spazio su disco, utilizzare il pacchetto boost che fornisce i file di intestazione e pacchetti binari specifici. Nel tuo caso, è boost_system-vc120.

Non è possibile rimuovere il pacchetto boost perché i pacchetti binari, come boost-vc120/boost_system-vc120, dipendono da esso.

+1

'boost-vc120' scaricherà tutte le librerie di boost, ma collegherà solo le librerie effettivamente utilizzate nel progetto. Boost sfrutta la direttiva '#pragma comment (lib)' di VC++ nelle intestazioni per specificare quali librerie devono essere collegate. – Ferruccio

+0

Ovviamente ho risolto la risposta. Grazie. –