Wie vermeiden Sie "Fehler LNK2005:" (bereits definierte STDLIB -Funktionen) beim Kompilieren von libpng mit Microsoft Visual Studio '08?

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

Frage

(Warum ich das versuche, dies zu tun: Ich hatte kein Glück, die vorgefertigten Binärdateien für libpng unter Windows (trotz vieler Stunden der Versuch und Irrtum) zu verwenden, und ich versuche daher jetzt selbst zu kompilieren. Ich habe festgestellt Dieser hilfreiche Blog -Beitrag In Bezug auf dies, komplett mit einer Projektdatei von Microsoft Visual Studio 2008, konnten sie jedoch leider nicht verwenden.)

Es kompiliert erfolgreich bei der Verknüpfung mit der Zlib -Binärin, die gefunden wurde hier, Aber wenn ich versuche, sie mit einer Testdatei zu verknüpfen, erhalte ich Folgendes:

    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

Könnte jemand etwas Licht geben, wie diese Fehler behoben werden können?

War es hilfreich?

Lösung

Das Problem ist, dass eines der beiden Projekte verwendet Multi-Threadd-DLL Während der andere verwendet Multi-Threaded (ohne DLL darin) in Projekteigenschaften -> Konfigurationseigenschaften -> C/C ++ -> Codegenerierung.

Ist mir mehrmals passiert.

Stellen Sie sicher, dass Sie diese Einstellung auch für Release -Builds und für jede mögliche Kombination synchronisieren (Debug, Nicht -Debug usw.).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top