Wie vermeiden Sie "Fehler LNK2005:" (bereits definierte STDLIB -Funktionen) beim Kompilieren von libpng mit Microsoft Visual Studio '08?
-
20-09-2019 - |
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?
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.).