Como evitar “Erro LNK2005:” (Funções STDLIB já definidas) ao compilar libpng com o Microsoft Visual Studio '08?

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

Pergunta

(Por que estou tentando fazer isso: não tive sorte em usar os binários pré-criados para libpng no Windows (apesar de muitas horas de tentativa e erro) e, portanto, agora estou tentando compilá-lo. Esta postagem útil do blog Em relação a isso, completo com um arquivo de projeto do Microsoft Visual Studio 2008, mas infelizmente ainda não conseguiu usá -lo.)

Ele compila com sucesso ao vincular ao binário de Zlib encontrado aqui, mas ao tentar vinculá -lo a um arquivo de teste, recebo o seguinte:

    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

Alguém poderia se importar em esclarecer como corrigir esses erros?

Foi útil?

Solução

O problema é que um dos dois projetos está usando DLL multithread Enquanto o outro está usando Multi-thread (sem DLL nele) nas propriedades do projeto -> Propriedades de configuração -> c/c ++ -> geração de código.

Aconteceu comigo várias vezes.

Certifique -se de "sincronizar" essa configuração, mesmo para construções de liberação e para cada possível combinação (depuração, não depuração, etc)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top