¿Cómo evitar el “error LNK2005:” (ya definida funciones stdlib) al compilar libpng con Microsoft Visual Studio '08?

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

Pregunta

(¿Por qué estoy tratando de hacer esto:. He tenido suerte en el uso de los binarios pre-construidos para libpng en Windows (a pesar de muchas horas de ensayo y error), y por lo tanto ahora estoy tratando de compilar yo mismo he encontrado útil esta entrada de blog con respecto a este , con un archivo de proyecto de Microsoft Visual Studio 2008, pero desgraciadamente todavía no han sido capaces de usarlo.)

Se compila correctamente cuando se enlaza a la binario zlib encontrados aquí , pero cuando se trata de vincularlo a un archivo de prueba de recibo el 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

Cualquiera podía cuidar de arrojar alguna luz sobre la manera de corregir estos errores?

¿Fue útil?

Solución

El problema es que uno de los dos proyectos es el uso de Multi-threaded DLL mientras que el otro está usando Multi-roscado (sin DLL en ella) en las propiedades del proyecto - > Propiedades de Configuración -> C / C ++ -.> La generación de código

que me pasó 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.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top