2009-12-21 10 views
16

(Perché sto cercando di farlo: non ho avuto fortuna nell'usare i binari precompilati per libpng su Windows (nonostante molte ore di tentativi ed errori), e quindi sto provando a compilarlo da solo.Ho trovato this helpful blog post riguardo a questo, completo con un file di progetto Microsoft Visual Studio 2008, ma purtroppo non è ancora stato in grado di usarlo.)Come evitare "errore LNK2005:" (funzioni stdlib già definite) durante la compilazione di libpng con Microsoft Visual Studio '08?

Compila con successo quando si collega al binario zlib trovato here, ma quando si tenta di collegarlo a un test File ricevo il seguente:

 
    C:\Documents and Settings\Administrator\My Documents>cl "C:\Documents and Settin 
    gs\Administrator\My Documents\test.c" "C:\Documents and Settings\Administrator\M 
    y Documents\libpng.lib" -I "C:\Documents and Settings\Administrator\My Documents\include" 

    Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86 
    Copyright (C) Microsoft Corporation. All rights reserved. 

    test.c 
    Microsoft (R) Incremental Linker Version 9.00.30729.01 
    Copyright (C) Microsoft Corporation. All rights reserved. 

    /out:test.exe 
    test.obj 
    "C:\Documents and Settings\Administrator\My Documents\libpng.lib" 
    MSVCRTD.lib(MSVCR90D.dll) : error LNK2005: _abort already defined in LIBCMT.lib(
    abort.obj) 
    MSVCRTD.lib(MSVCR90D.dll) : error LNK2005: _fread already defined in LIBCMT.lib(
    fread.obj) 
    MSVCRTD.lib(MSVCR90D.dll) : error LNK2005: _malloc already defined in LIBCMT.lib 
    (malloc.obj) 
    MSVCRTD.lib(MSVCR90D.dll) : error LNK2005: _free already defined in LIBCMT.lib(f 
    ree.obj) 
    MSVCRTD.lib(MSVCR90D.dll) : error LNK2005: ___iob_func already defined in LIBCMT 
    .lib(_file.obj) 
    LINK : warning LNK4098: defaultlib 'MSVCRTD' conflicts with use of other libs; u 
    se /NODEFAULTLIB:library 
    test.exe : fatal error LNK1169: one or more multiply defined symbols found 

può fregare chiunque di fare luce su come risolvere questi errori?

risposta

37

Il problema è che uno dei due progetti sta usando multi-threaded DLL mentre l'altro sta usando multi-threaded (senza DLL in esso) in Proprietà del progetto -> Proprietà di configurazione -> C/C++ - > Generazione del codice.

Mi è successo più volte.

Assicurati di "sincronizzare" l'impostazione anche per il build di rilascio, e per ogni possibile combinazione (debug, non di debug, ecc)

+3

Grazie! Ore di mal di testa risolti in 10 minuti :) – Sam

+0

XD grazie: D [... almeno 15 caratteri] –

+0

Che ... era assolutamente incredibile. Inoltre, idem, Sam. – tjklemz

Problemi correlati