كيفية تجنب "خطأ LNK2005:" (وظائف stdlib المحددة بالفعل) عند تجميع libpng مع Microsoft Visual Studio '08؟

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

سؤال

(لماذا أحاول القيام بذلك: لم يكن لدي حظ في استخدام الثنائيات التي تم بناؤها مسبقًا لـ libpng على النوافذ (على الرغم من عدة ساعات من التجربة والخطأ) ، وبالتالي أحاول الآن تجميعها بنفسي. لقد وجدت هذا المدونة المفيدة فيما يتعلق بهذا ، مع ملف مشروع Microsoft Visual Studio 2008 ، ولكن للأسف لم يتمكن من استخدامه.)

يجمع بنجاح عند الارتباط بـ Zlib Binary هنا, ، ولكن عند محاولة ربطه بملف اختبار أتلقى ما يلي:

    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

هل يمكن لأي شخص أن يهتم بإلقاء بعض الضوء فيما يتعلق بكيفية إصلاح هذه الأخطاء؟

هل كانت مفيدة؟

المحلول

المشكلة هي أن أحد المشروعين يستخدم متعدد الخيوط DLL بينما يستخدم الآخر متعدد الخيوط (بدون DLL في تكنولوجيا المعلومات) في خصائص المشروع -> خصائص التكوين -> C/C ++ -> توليد الكود.

حدث لي عدة مرات.

تأكد من "مزامنة" هذا الإعداد حتى بالنسبة لبنيات الإصدار ، ولكل مجموعة ممكنة (تصحيح ، غير تصحيح ، إلخ)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top