2015-10-28 30 views
5

Non riesco, per amore di Dio, a collegare staticamente le librerie ZLIB. Ho lottato per un paio d'ore senza successo. Bene, ho seguito questo tutorial e ho compilato con successo sia zlibstat.lib che zlibwapi.lib per 32 bit. Dopo aver impostato il mio progetto per utilizzare la cartella ZLIB con le librerie (Linker> Generale> Directory aggiuntive di libreria) e impostare zlibwapi.lib (solo) come dipendenza (Linker> Input> Dipendenze aggiuntive) l'ho preso a lavoro, tuttavia , questo era un collegamento dinamico (Ho bisogno di distribuire la mia applicazione con la DLL ZLIB). Di solito uso il collegamento dinamico su Debug e statico su Release.Collegamento statico ZLIB (1.2.8) su Visual Studio 2012

Ho provato a cercare che diavolo sia lo zlibstat.lib e per cosa è stato usato, se non per il collegamento statico, assumendo il suffisso "stat".

Ci sono dei preprocessori da aggiungere al mio progetto, qualcosa come ZLIB_STATIC o qualcosa del genere, per usare il collegamento statico di ZLIB o non avrei mai rimosso ZLIB_WINAPI dal progetto zlibstat, proprio come mi ha detto il collegamento sopra? È impossibile il collegamento statico ZLIB (quindi, a cosa serve zlibstat.lib?)?

Sono abbastanza perso. Qualsiasi aiuto è molto apprezzato.

Edit (Ulteriori informazioni):

Errori:

error LNK2001: unresolved external symbol [email protected] 
error LNK2001: unresolved external symbol [email protected] 
error LNK2001: unresolved external symbol [email protected] 

Linking:

A differenza del collegamento dinamico (che ha lavorato), dove ho aggiunto zlibwapi.lib come dipendenza, per il collegamento statico che sto cercando di ottenere ha invece aggiunto zlibstat.lib come dipendenza! Non sono state aggiunte altre librerie!

Questa domanda potrebbe apparire come this (tipo di).

risposta

3

Sono finalmente riuscito a risolvere il mio problema. Per coloro che finiscono in un tale problema, ecco come risolverlo:

Se avete seguito il tutorial nel mio primo post, si sarebbe tolto ZLIB_WINAPI dal preprocessore del progetto zlibstat. Tuttavia, dopo aver impostato il mio progetto (impostazione del percorso delle dipendenze ZLIB, librerie delle dipendenze LIB ecc.) Che utilizza ZLIB, ho accidentalmente incluso/definito la dannata macro ZLIB_WINAPI nel file di intestazione che sto usando ZLIB, proprio prima di includere "zlib". h".

Una cosa curiosa a questo proposito è che quando si avvia l'app in modalità di debug (che utilizzava il collegamento dinamico), tutto ha funzionato e funzionato come un incantesimo, senza alcun avvertimento o qualunque, TUTTAVIA, sulla modalità di rilascio (che stava usando il collegamento statico), si è schiantato.

Quindi, per chiarire le cose, il tutorial ci dice di rimuovere il ZLIB_WINAPI preprocessore dal progetto zlibstat, che produce il lib statica, mentre il progetto zlibvc ha il ZLIB_WINAPI nel suo preprocessore. In altre parole, ciò significa che se utilizziamo collegamenti diversi per ogni configurazione (debug/release), dobbiamo aggiungere la macro ZLIB_WINAPI o no!

Definire la macro ZLIB_WINAPI prima di includere "zlib.h" se si utilizza il collegamento dinamico (zlibwapi.lib) e che il progetto zlibvc non sia modificato (supponendo che abbiate seguito correttamente il tutorial dal link sopra) e non lo definiate se avete rimosso ZLIB_WINAPI dal progetto zlibstat (come ci dice il tutorial)!

Un utile macro ho usato il mio progetto è il seguente:

// Since we used dynamic linking for debug, we have to define the ZLIB_WINAPI 
#if defined(_WIN32) && defined(_DEBUG) 
    #define ZLIB_WINAPI 
#endif 
#include <zlib.h> 

Le cose sono davvero confusa e spero davvero che ero abbastanza chiaro.

+0

Potrebbe per favore spiegare più chiaramente la procedura da seguire per collegare staticamente Zlib. Ho avuto lo stesso problema. Grazie – DevAndroid