在使用Microsoft Visual Studio '08编译libpng时,如何避免“错误LNK2005:”(已经定义了stdlib函数)?

时间:2009-12-21 02:57:07

标签: c visual-studio visual-studio-2008 visual-c++ lnk2005

(为什么我要尝试这样做:我没有运气在Windows上使用libpng预先构建的二进制文件(尽管经过了数小时的试验和错误),因此我现在正在尝试自己编译它。我找到了this helpful blog post有关此问题,请填写Microsoft Visual Studio 2008项目文件,但遗憾的是仍然无法使用它。)

在链接到找到here的zlib二进制文件时成功编译,但在尝试将其链接到测试文件时,我会收到以下信息:

    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

有人可以关注如何解决这些错误吗?

1 个答案:

答案 0 :(得分:37)

问题是,两个项目中的一个使用多线程DLL ,而另一个项目在项目属性中使用多线程(不包含DLL) - >配置属性 - > C / C ++ - >代码生成。

发生了好几次。

确保即使对于发布版本以及每种可能的组合(调试,非调试等),“同步”该设置