errore irreversibile LNK1104: impossibile aprire il file "libboost_system-vc110-mt-gd-1_51.lib"


88

Sembra che non riesca a farlo funzionare. Ho realizzato una semplice applicazione console (che dipende dalla websocket++libreria) che necessita di Boostlibrerie .. ma quando provo a compilare ottengo:

errore irreversibile LNK1104: impossibile aprire il file "libboost_system-vc110-mt-gd-1_51.lib"

Tuttavia, ho fatto il bjam che ha creato la lib in (boost_root)/stage/libse ho collegato il percorso alle librerie al compilatore C++/Additionnals includes.

Se guardo nel (boost_root)/stage/libsfile libboost_system-vc110-mt-gd-1_51.libnon c'è. Si chiama libboost_system-vc110-mt-sgd-1_51.libinvece.

Qualche idea?


1
Sono stato in grado di creare il file libboost_system-vc110-mt-gd-1_51.lib eseguendo una build completa con bjam, tuttavia ricevo ancora l'errore.
Rushino

22
Apri il VS2012 developer command prompt, vai alla tua directory root boost e digita bootstrap, quindi digita b2e dovresti ottenere un set completo di file di libreria.
Jesse Good

Hai aggiunto i percorsi di inclusione e di collegamento al tuo progetto?
Jesse Good

1
Stai costruendo la tua applicazione con /MD?
Mahesh

Se va bene scaricare invece di compilare, scarica le librerie da qui: code.ingres.com/boostlib/trunk/stage/lib
gorogm

Risposte:


93

Il parametro C ++ → Generale → Directory di inclusione aggiuntive serve per elencare le directory in cui il compilatore cercherà i file di intestazione.

È necessario indicare al linker dove cercare le librerie a cui collegarsi. Per accedere a questa impostazione, fare clic con il pulsante destro del mouse sul nome del progetto nella finestra Esplora soluzioni , quindi Proprietà → Linker → Generale → Directory di libreria aggiuntive . Inserisci <boost_path>\stage\libqui (questo è il percorso in cui si trovano le librerie se costruisci Boost utilizzando le opzioni predefinite).


puoi spiegarmi cos'è boost_path
ggsmartboy

1
@ggsmartboy È il percorso in cui si trovano i file sorgente del boost (lo stesso percorso che elenchi nel compilatore include i percorsi in modo che possa trovare le intestazioni del boost). La risposta presuppone che tu abbia creato boost da solo (non utilizzando una distribuzione) utilizzando le opzioni di build predefinite.
Pretorio

Eccezionale. Mi ha risparmiato anche un vero mal di testa. Perché sembravo incapace di individuarlo nella documentazione del boost (se è anche lì), non lo so! :)
absentmindeduk

2
Le impostazioni a cui si fa riferimento in questa risposta si trovano se fai clic con il pulsante destro del mouse sul progetto e scegli le proprietà (per i noob come me, facendo clic con il pulsante destro del mouse sulla soluzione, andando su Strumenti> Opzioni, ecc. Queste opzioni non erano presenti su tutti i miei progetti). VS2013
Mr_and_Mrs_D

1
@Mr_and_Mrs_D Hai ragione, pensavo che il lettore conoscesse quella parte. Aggiornato.
Praetorian

97

Questo è il modo più semplice per un dilettante come me che sta studiando C ++ da solo:

Per prima cosa decomprimere la libreria boost in una directory di tua scelta. Mi raccomando c:\directory.

  1. Apri il tuo visual C ++.
  2. Crea un nuovo progetto.
  3. Fare clic con il tasto destro sul progetto.
  4. Fare clic sulla proprietà.
  5. Fare clic su C / C ++.
  6. Fare clic su generale.
  7. Seleziona una libreria di inclusioni aggiuntiva.
  8. Includere la destinazione della libreria. es c:\boost_1_57_0.
  9. Fare clic sull'intestazione del pre-compilatore.
  10. Fare clic su crea / usa intestazione precompilata.
  11. Selezionare non utilizzare intestazione precompilata.

Quindi vai alla libreria di link in cui hai riscontrato i tuoi problemi.

  1. Vai a dove era il file estratto c:\boost_1_57_0.
  2. Fare clic su booststrap.bat(non preoccuparti di digitare nella finestra di comando, aspetta e non chiudere la finestra che è il posto in cui ho avuto il mio problema che mi ha impiegato due settimane per risolvere. Dopo un po ' booststrapverrà eseguito e produrrà lo stesso file, ma ora con due nomi diversi:, b2e bjam.
  3. Fare clic su b2e attendere che venga eseguito.
  4. Fare clic su bjame attendere che venga eseguito. Quindi verrà prodotta una cartella chiamata stage.
  5. Fare clic con il tasto destro sul progetto.
  6. Fare clic sulla proprietà.
  7. Fare clic sul linker.
  8. Fare clic su generale.
  9. Fare clic su includi directory della libreria aggiuntiva.
  10. Seleziona la parte della libreria es c:\boost_1_57_0\stage\lib.

E sei a posto!


3
Grazie mille Wu Jie - Non avevo mai fatto nulla di simile prima e questi passaggi erano esattamente ciò di cui avevo bisogno per compilare Boost e produrre il file di libreria mancante 'libboost_serialization-vc140-mt-gd-1_57.lib' che stavo avendo problemi a collegare: )
Vixxd

5
Grazie, mi piacciono le belle istruzioni dettagliate. Per il passaggio 2/3/4 della configurazione di boost, quello che ho fatto invece è stato: a) aprire un prompt della riga di comando come root ; b) passare alla directory boost_1_57_0; c) tipo bootstrap.bat(ci sono voluti 10-20 secondi); d) digitare ./b2come da istruzioni (sono stati necessari 30-40 minuti per completare)
Darren Cook

1
Ho dovuto aprire bootstrap.bat utilizzando il prompt dei comandi di Visual Studio, poiché il normale prompt dei comandi non sapeva come elaborare il comando "cl".
jlaverde

2/20/2018, la tua soluzione funziona per me (VS2017 + Boost 1.66). Grazie mille.
CaTx

Grazie per i passaggi per i principianti. Vorrei che tutti dessero sempre risposte come hai dato tu.
Mudit Jain

6

Ho avuto lo stesso problema. È stato causato perché ho compilato il Boost con Visual C ++ 2010 (v100) e ho provato a utilizzare la libreria con Visual Studio 2012 (v110) per errore.

Quindi, ho modificato le configurazioni (in Visual Studio 2012) andando su Proprietà del progetto -> Generale -> Set di strumenti della piattaforma e ho modificato il valore da Visual Studio 2012 (v110) a Visual Studio 2010 (v100) .


7
Spero che ti rendi conto che quando modifichi il set di strumenti della piattaforma per utilizzare v100, stai dicendo all'IDE VS2012 di utilizzare il compilatore fornito con VS2010. Qualsiasi funzionalità C ++ 11 aggiunta al compilatore VS2012 non sarà disponibile. Una soluzione migliore è compilare Boost utilizzando il compilatore VS2012; puoi far coesistere le librerie generate dal 2010 e dal 2012 perché Boost inserisce il numero di versione del compilatore nei nomi dei file di output.
Praetorian

Hai ragione e ne sono consapevole. Ho paura di cosa potrebbe accadere se aggiorno le librerie e il compilatore. Quindi, quando il progetto sarà finito, sistemerò tutte queste cose. Grazie!
Jota Santos

6

Ancora un'altra soluzione:

Ero perplesso perché stavo includendo boost_regex-vc120-mt-gd-1_58.lib nella mia proprietà Link-> Additional Dependencies, ma il collegamento continuava a dirmi che non poteva aprire libboost_regex-vc120-mt-gd-1_58.lib ( notare il prefisso lib). Non ho specificato libboost_regex-vc120-mt-gd-1_58.lib.

Stavo cercando di utilizzare (e avevo costruito) le librerie dinamiche boost (.dlls) ma non avevo definito la macro BOOST_ALL_DYN_LINK. Apparentemente ci sono suggerimenti nella compilazione per includere una libreria, e senza BOOST_ALL_DYN_LINK cerca la libreria statica (con il prefisso lib), non la libreria dinamica (senza un prefisso lib).


Ancora solo 1 voto positivo, eppure mi ritrovo qui ogni pochi mesi, ricordandomi di nuovo quale sia la soluzione al mio problema !!
Neil Gatenby

3

Ho avuto lo stesso problema e il mio errore è stato di aver installato il binario boost_1_55_0-msvc-11.0-32.exe da utilizzare con visual c ++ 2010 che ha la versione v100 (proprietà del progetto-> ConfiguratioProperties-> Generale-> platformTooset) non v110 come visual c ++ 2012. Quindi ho scaricato boost_1_55_0-msvc-10.0-32.exe e ora è tutto ok finora.


2

In caso di problemi con la creazione di boost o preferisci non farlo, un'alternativa è scaricare i file lib da SourceForge . Il collegamento ti porterà a una cartella di file lib e dll compressi per la versione 1.51. Tuttavia, dovresti essere in grado di modificare il collegamento per specificare la versione scelta. Apparentemente il programma di installazione di BoostPro ha alcuni problemi.


2

Ho avuto un problema simile durante il tentativo di utilizzare il test di unità boost in Visual Studio 2015 (Community Edition):

errore irreversibile LNK1104: libboost_unit_test_framework-vc140-mt-1_57

così ho pensato di condividere la mia soluzione.

È possibile creare un progetto di test di unità boost in due modi (e questa soluzione funziona per entrambi):

  1. usando il Boost Unit Test Adapter
  2. o creando un'applicazione console Win32 ( passaggi qui ) e sostituendo la funzione principale con una funzione di test delle unità boost ( passaggi qui ).

Ecco i passaggi che ho seguito per far funzionare entrambi i progetti:

Innanzitutto, scarica la versione boost desiderata (ad esempio, boost_1_57_0 ). È possibile scaricare boost con i binari corretti (compilati utilizzando msvc v140) o estrarre i binari da soli eseguendo i seguenti comandi dalla riga di comando:

  1. bootstrap.bat
  2. "C: \ Programmi (x86) \ Microsoft Visual Studio 14.0 \ VC \ vcvarsall.bat" x86
  3. bjam: pulito
  4. bjam -j4 --debug-symbols = on --build-type = complete toolset = msvc-14.0 threading = multi runtime-link = shared address-model = 32

Dove msvc-14.0 specifica che è necessaria la versione di Visual Studio 2015 (VS 2015 = v14.0 = v140) e address-model = 32 specifica che abbiamo bisogno della piattaforma 32 (ma lo stesso può essere fatto per 64 bit).

Una volta che hai i binari, vai a Visual Studio, seleziona il progetto Boost Unit Testing che hai creato. Vai a Proprietà progetto> configurazione (dal menu principale) e fai le seguenti scelte:

  • Imposta " Generale> Set di strumenti della piattaforma " su Visual Studio 2015 (v140).

  • Includere il percorso della cartella boost (ad esempio C: \ boost_1_57_0) e il percorso della sottocartella contenente i file binari (ad esempio C: \ boost_1_57_0 \ stage \ lib) in:

    • " C \ C ++> Directory di inclusione aggiuntiva "
    • e " Linker> Directory di libreria aggiuntive ".

1

b2 -j% cores% toolset =% msvcver% address-model = 64 architecture = x86 link = static threading = multi runtime-link = shared --build-type = minimal stage --stagedir = stage / x64

Proprietà → Linker → Generale → Directory di libreria aggiuntive $ (BOOST) \ stage \ x64 \ lib


Un po 'più di elaborazione su cosa stanno facendo quelle righe e perché -> aiuterebbe a migliorare la qualità di questa risposta.
Anton Menshov

0

Ho avuto lo stesso problema segnalato qui. Ho risolto il problema spostando mainTest.cpp da una sottocartella src / mainTest / alla cartella principale src / Immagino che questo fosse anche il tuo problema.


0

2>LINK : fatal error LNK1104: cannot open file 'libboost_regex-vc120-mt-sgd-1_55.lib

Nel mio caso, bootstrap / bjam non era disponibile (le librerie erano precompilate e inviate a SCM) sul vecchio progetto ereditato. libboost_regex-mt-sgd.libTuttavia, le biblioteche non avevano il controllo delle versioni VC o BOOST nei nomi dei file, ad esempio:Processed /DEFAULTLIB:libboost_regex-vc120-mt-sgd-1_55.lib qualche modo veniva attivato automaticamente.

Risolto aggiungendo manualmente il nome del file senza versione a:

<AdditionalDependencies>$(DK_BOOST)\lib64\libboost_regex-mt-sgd.lib</AdditionalDependencies>

e inserire nella lista nera ...vc120-mt-sgd-1_55.libin

<IgnoreSpecificDefaultLibraries>libboost_regex-vc120-mt-sgd-1_55.lib</IgnoreSpecificDefaultLibraries>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.