Come evitare “l'errore LNK2005:” (già definito funzioni stdlib) durante la compilazione libpng con Microsoft Visual Studio '08?

StackOverflow https://stackoverflow.com/questions/1937937

Domanda

(Perché sto cercando di fare questo:. Ho avuto fortuna ad utilizzare i binari pre-costruiti per libpng su Windows (nonostante le molte ore di tentativi ed errori), e quindi ora sto cercando di compilarlo mi sono trovata questo utile post sul blog riguardo a questo , completo di un file di progetto di Microsoft Visual Studio 2008, ma purtroppo non sono ancora stati in grado di usarlo.)

Si compila con successo durante il collegamento al binario zlib trovati qui , ma quando si tenta di collegarlo a un file di prova 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

Qualcuno potrebbe preoccuparsi di far luce su come risolvere questi errori?

È stato utile?

Soluzione

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

successo a me diverse volte.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top