2009-11-26 1 views
6

Ho scaricato il codice sorgente per Launchy e sto provando a crearlo in Visual Studio 2005. Il progetto Launchy è stato creato utilizzando VC7, quindi ho dovuto aggiornare i file di progetto a VC8 e il processo sembrava andare bene . Tuttavia, Launchy usa anche le librerie Boost 1.33.1 e quello che ho creato sono le librerie Boost 1.41.0 (oggetti di scena in Boost per rendere le librerie più recenti molto più facili da compilare), quindi ho anche aggiornato il progetto per puntare al mio nuovo Potenzia l'installazione di libs. Ora ho il seguente errore del linker:Errore del linker lib di Visual C++

fatal error LNK1104: cannot open file 'libboost_regex-vc80-mt-sgd-1_41.lib' 

ho dato un'occhiata nella directory lib Boost e la corrispondenza più vicina che ho potuto trovare è ...

libboost_regex-vc80-mt-gd-1_41.lib 

Avviso mancante 's'. Non capisco qual è la differenza in libs e se Visual Studio sta cercando la cosa sbagliata o il mio processo di build Boost non è riuscito a creare le librerie corrette. Qualcuno può indicarmi la giusta direzione?

Come esperimento, ho creato una copia della regex lib che ho e l'ho rinominata con ciò che il linker sta cercando. Questo mi dà una lunga lista di errori del linker sui simboli già in corso di definizione in MSVCRTD.LIB, come ad esempio il seguente:

error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" ([email protected]@[email protected]@@Z) already defined in libcmtd.lib(typinfo.obj) 

cercherò di costruire il Boost 1.33.1 librerie e puntare il mio file di progetto in quel Launchy anziché. Ma mi piacerebbe ancora sapere cosa c'è di sbagliato con le mie librerie Boost 1.41.0.

Edit: ho trovato un riferimento a quello che in the Boost docs libs le 's' sono:

Use this library when linking statically to the C++ standard library and compiler runtime support libraries.

così sembra che le librerie 's' sono quelle giuste. Ora devo solo capire come costruirli.

Soluzione: Sono stato in grado di creare le librerie di boost mancanti con la seguente riga di comando.

bjam --build-type=complete msvc stage 

ho corse che dopo già in esecuzione boostrap.bat nella directory in cui vive spinta.

+0

Se non vuoi scherzare con la costruzione, puoi ottenerli qui: http://boost.teeks99.com – teeks99

risposta

10

La differenza è clearly described in Boost docs - "mt-sgd" significa "debug, librerie di runtime collegate in modo statico, multithreading, con simboli di debug". "mt-gd" è lo stesso, ma utilizza librerie di runtime collegate dinamicamente (ad esempio msvcrtd.lib invece di libcmtd.lib).

O modificare le impostazioni del progetto per utilizzare il collegamento CRT dinamico (ad esempio/MDD anziché/MTd), oppure creare Boost utilizzando il collegamento statico - il mixaggio di quelle non funzionerà correttamente.

3

Quale comando è stato utilizzato per aumentare la potenza? prova a specificare build-type = complete. Normalmente dovrebbe anche costruire le librerie.

+0

Farò una prova, grazie. Penso di averlo costruito senza specificare il tipo di build. – Parappa

+0

Funziona! Grazie ancora. – Parappa

+0

Non funziona per me. le librerie s non sono costruite. boost 1.54 – Max