2009-12-21 13 views
16

(Por qué trato de hacer esto: no he tenido suerte en el uso de los binarios precompilados para libpng en Windows (a pesar de muchas horas de prueba y error), y ahora estoy tratando de compilarlo. Encontré this helpful blog post sobre esto, complete con un archivo de proyecto de Microsoft Visual Studio 2008, pero desafortunadamente todavía no han podido usarlo).Cómo evitar el "error LNK2005:" (funciones stdlib ya definidas) al compilar libpng con Microsoft Visual Studio '08?

Se compila correctamente al enlazar con el binario zlib encontrado here, pero al intentar vincularlo a una prueba archivo Recibo lo siguiente:

 
    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 

¿Alguien podría importar arrojar algo de luz sobre cómo solucionar estos errores?

Respuesta

37

El problema es que uno de los dos proyectos es el uso de DLL multiproceso mientras que el otro está utilizando multi-hilo (sin DLL en ella) en Propiedades del proyecto -> Propiedades de configuración -> C/C++ - > Generación de código.

Me ha sucedido varias veces.

Asegúrese de "sincronizar" que la fijación incluso para las versiones de lanzamiento, y para cada combinación posible (depuración, no de depuración, etc.)

+3

Gracias! Horas de un dolor de cabeza resuelto en 10 minutos :) – Sam

+0

XD gracias: D [... al menos 15 caracteres] –

+0

Eso ... fue absolutamente increíble. Además, ídem, Sam. – tjklemz

Cuestiones relacionadas