2012-10-18 18 views
14

Il mio progetto utilizzava una versione precedente di iostreams di Boost w/bzip2. Ora sto cercando di aggiornare a Boost 1.51. All'inizio non ho compilato con bzip, quindi ovviamente ho avuto il linker che urlava su libboost_bzip2-vc100-mt-sgd-1_51.lib mancante. Ho quindi seguito these instructions (e ho aggiunto il flag statico) per compilare questo file.Aumenta iostreams con bzip - simboli non risolti

Tuttavia, l'esecuzione il linker restituisce ora una serie di simboli mancanti:

>error LNK2001: unresolved external symbol "protected: __thiscall boost::iostreams::detail::bzip2_base::~bzip2_base(void)" ([email protected]@[email protected]@@[email protected]) 
>error LNK2001: unresolved external symbol "protected: __thiscall boost::iostreams::detail::bzip2_base::bzip2_base(struct boost::iostreams::bzip2_params const &)" ([email protected]@[email protected]@@[email protected][email protected]@@Z) 
>error LNK2001: unresolved external symbol "int const boost::iostreams::bzip2::stream_end" ([email protected]@[email protected]@@3HB) 
... 

Tutte le idee come mai il lib non contiene tutto il codice? Cosa mi manca? Sto usando VS2010 su Windows.


Modifica: Capito!

Aveva una vecchia versione di libboost_iostreams-vc100-mt-sgd-1_51.lib compilata senza bzip. Quello che sto ancora non sono sicuro di questo: Per la mia compilation originale che ho usato:

>b2 --with-iostreams -sBZIP2_SOURCE=D:\Work\external\bzip2-1.0.6 -sZLIB_SOURCE=d:\work\external\zlib-1.2.3 runtime-link=static 

Questo ha prodotto i seguenti file:

libboost_bzip2-vc100-mt-s-1_51.lib 
libboost_bzip2-vc100-mt-sgd-1_51.lib 

per la compilation "corretto" (che ha risolto il problema) Io ho usato:

>b2 --with-iostreams -sBZIP2_SOURCE=D:\Work\external\bzip2-1.0.6 runtime-link=static 

Ie semplicemente rimosso lo zlib, poiché non era necessario per me. Ha prodotto:

libboost_bzip2-vc100-mt-s-1_51.lib 
libboost_bzip2-vc100-mt-sgd-1_51.lib 
libboost_iostreams-vc100-mt-s-1_51.lib 
libboost_iostreams-vc100-mt-sgd-1_51.lib 

Come mai le librerie iostreams non sono state prodotte nella compilation originale? Molto strano.

Grazie.

+3

Invece di modificare la domanda con la soluzione, inserirla come risposta corretta e accettarla. –

+4

Provato, ma poiché mi sono registrato solo poco tempo fa, apparentemente non ho abbastanza reputazione per rispondere alle mie domande ... –

+0

@ E.K. prova ad accedere ad altri siti StackOverflow per aumentare la reputazione. –

risposta

1

Da E.K. di risposta-in-domanda:

aveva una vecchia versione di libboost_iostreams-VC100-mt-SGD-1_51.lib che è stato compilato senza il bzip. Quello che sto ancora non sono sicuro di questo: Per la mia compilation originale che ho usato:

>b2 --with-iostreams -sBZIP2_SOURCE=D:\Work\external\bzip2-1.0.6 -sZLIB_SOURCE=d:\work\external\zlib-1.2.3 runtime-link=static 

Questo ha prodotto i seguenti file:

libboost_bzip2-vc100-mt-s-1_51.lib 
libboost_bzip2-vc100-mt-sgd-1_51.lib 

per la compilation "corretto" (che ha risolto il problema) Io ho usato:

>b2 --with-iostreams -sBZIP2_SOURCE=D:\Work\external\bzip2-1.0.6 runtime-link=static 

Ie semplicemente rimosso lo zlib, poiché non era necessario per me. Ha prodotto:

libboost_bzip2-vc100-mt-s-1_51.lib 
libboost_bzip2-vc100-mt-sgd-1_51.lib 
libboost_iostreams-vc100-mt-s-1_51.lib 
libboost_iostreams-vc100-mt-sgd-1_51.lib 

Come mai le librerie iostreams non sono state prodotte nella compilation originale? Molto strano.