18

(为什么我要这样做:我在 Windows 上为 libpng 使用预构建的二进制文件时运气不佳(尽管经过了许多小时的反复试验),因此现在我正在尝试自己编译它。我发现这个有用的博客与此相关的帖子,附带 Microsoft Visual Studio 2008 项目文件,但遗憾的是仍然无法使用它。)

它在链接到此处找到的 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 位 C/C++ 优化编译器版本 15.00.30729.01 用于 80x86
    版权所有 (C) 微软公司。版权所有。

    测试.c
    Microsoft (R) 增量链接器版本 9.00.30729.01
    版权所有 (C) 微软公司。版权所有。

    /out:test.exe
    测试.obj
    "C:\Documents and Settings\Administrator\My Documents\libpng.lib"
    MSVCRTD.lib(MSVCR90D.dll):错误 LNK2005:_abort 已在 LIBCMT.lib(
    中止.obj)
    MSVCRTD.lib(MSVCR90D.dll):错误 LNK2005:_fread 已在 LIBCMT.lib 中定义(
    fread.obj)
    MSVCRTD.lib(MSVCR90D.dll):错误 LNK2005:_malloc 已在 LIBCMT.lib 中定义
    (malloc.obj)
    MSVCRTD.lib(MSVCR90D.dll) : 错误 LNK2005: _free 已经在 LIBCMT.lib(f
    ree.obj)
    MSVCRTD.lib(MSVCR90D.dll):错误 LNK2005:___iob_func 已在 LIBCMT 中定义
    .lib(_file.obj)
    链接:警告 LNK4098:defaultlib 'MSVCRTD' 与使用其他库冲突;你
    se /NODEFAULTLIB:库
    test.exe:致命错误 LNK1169:找到一个或多个多重定义的符号

任何人都可以关心如何解决这些错误吗?

4

1 回答 1

38

问题是两个项目之一正在使用多线程 DLL,而另一个在项目属性 -> 配置属性 -> C/C++ -> 代码生成中使用多线程(其中没有 DLL)。

发生在我身上好几次了。

即使对于发布版本和每个可能的组合(调试、非调试等),也要确保“同步”该设置

于 2009-12-21T03:05:15.403 回答