¿Cómo evitar el "error LNK2005:"(funciones de stdlib ya definidas) al compilar libpng con Microsoft Visual Studio ''08?
visual-studio visual-studio-2008 (1)
El problema es que uno de los dos proyectos está usando DLL de subprocesos múltiples mientras que el otro está usando subprocesos múltiples (sin DLL en él) en Propiedades del proyecto -> Propiedades de configuración -> C / C ++ -> Generación de código.
Me pasó varias veces.
Asegúrese de "sincronizar" esa configuración incluso para las compilaciones de lanzamiento y para cada combinación posible (depuración, no depuración, etc.)
(Por qué estoy tratando de hacer esto: no he tenido la suerte de usar los binarios precompilados para libpng en Windows (a pesar de muchas horas de prueba y error) y, por lo tanto, ahora estoy intentando compilarlo. Encontré este útil blog. publicación relacionada con esto, completa con un archivo de proyecto de Microsoft Visual Studio 2008, pero desafortunadamente todavía no he podido usarlo.)
Se compila correctamente cuando se vincula al binario zlib que se encuentra here , pero al intentar vincularlo a un archivo de prueba, 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
¿Podría alguien preocuparse por arrojar algo de luz sobre cómo corregir estos errores?