ERROR _fclose already defined in ?? | CImage



  • hallo,

    ich möchte in meinem MFC-Programm mit CImage arbeiten und habe
    deswegen die cimage.h included und folgende dateien dem projekt
    beigefügt und gelinkt:

    cimage.lib jpeg.lib png.lib zlib.lib
    

    allerdings kommen nun diese fehler:

    msvcrtd.lib(MSVCRTD.dll) : error LNK2005: _fclose already defined in libcmtd.lib(fclose.obj)
    msvcrtd.lib(MSVCRTD.dll) : error LNK2005: _strncmp already defined in libcmtd.lib(strncmp.obj)
    msvcrtd.lib(MSVCRTD.dll) : error LNK2005: _fflush already defined in libcmtd.lib(fflush.obj)
    msvcrtd.lib(MSVCRTD.dll) : error LNK2005: _memmove already defined in libcmtd.lib(memmove.obj)
    msvcrtd.lib(MSVCRTD.dll) : error LNK2005: _exit already defined in libcmtd.lib(crt0dat.obj)
    msvcrtd.lib(MSVCRTD.dll) : error LNK2005: _sprintf already defined in libcmtd.lib(sprintf.obj)
    msvcrtd.lib(MSVCRTD.dll) : error LNK2005: _getenv already defined in libcmtd.lib(getenv.obj)
    msvcrtd.lib(MSVCRTD.dll) : error LNK2005: _malloc already defined in libcmtd.lib(dbgheap.obj)
    msvcrtd.lib(MSVCRTD.dll) : error LNK2005: _free already defined in libcmtd.lib(dbgheap.obj)
    msvcrtd.lib(MSVCRTD.dll) : error LNK2005: _gmtime already defined in libcmtd.lib(gmtime.obj)
    msvcrtd.lib(MSVCRTD.dll) : error LNK2005: _calloc already defined in libcmtd.lib(dbgheap.obj)
    msvcrtd.lib(MSVCRTD.dll) : error LNK2005: __strcmpi already defined in libcmtd.lib(stricmp.obj)
    msvcrtd.lib(MSVCRTD.dll) : error LNK2005: __setmbcp already defined in libcmtd.lib(mbctype.obj)
    LINK : warning LNK4098: defaultlib "mfc42d.lib" conflicts with use of other libs; use /NODEFAULTLIB:library
    LINK : warning LNK4098: defaultlib "mfcs42d.lib" conflicts with use of other libs; use /NODEFAULTLIB:library
    LINK : warning LNK4098: defaultlib "msvcrtd.lib" conflicts with use of other libs; use /NODEFAULTLIB:library
    


  • die oben aufgezählten fehler kommen nur, wenn ich in den Einstellungen
    meines Projektes auf

    "Use MFC in a Static Library"
    

    stelle, bei

    "Use MFC in a Shared DLL"
    

    kommen keine Fehler!

    woran kann das liegen? also ich möchte schon die "Static Library" verwenden
    damit mein Programm auch ohne Probleme auf Rechnern läuft wo kein MFC
    installiert ist!



  • naja,
    wenn du mal already defined in durch den übersetzer jagst wird er dir folgendes an den kopf schmeisen bereits in definiert 🙄

    soll heisen das folgende funktionen beteits in einer *.lib definiert/aufgelöst wurden & dies nicht nochmal passieren muß. 😉

    conflicts with use of other libs heist soviel wie
    Konflikte durch Gebrauch von anderen Bibliotheken

    mit use /NODEFAULTLIB:library macht dir der MFC noch einen vorschlag das du unter Projecteinstellungen zb mit /NODEFAULTLIB:mfc42d.lib *.lib's ausschließen kannst.

    kurz um die *.lib die du in dein Project verwendest vertragen sich untereinander nicht.

    versuch es mal mit anderen lib's aus anderen SDK's
    http://www.microsoft.com/downloads/results.aspx?pocId=10&freetext=sdk&DisplayLang=en



  • hallo,

    danke schonmal für deine antwort! mit einem neuem SDK habe ich es schon
    probiert - also installiert und die Verzeichnisse verlinkt:

    http://mitglied.lycos.de/farin/f.png

    allerdings die selben fehler...

    aber warum passiert es denn nur wenn mein Projekt auf "Use MFC in a Static Library" stelle?

    was kann ich noch tun?

    p.s: das was auf dem bild für die Includes zu sehen ist hab ich natürlich auch fpr die Libs gemacht...



  • du könntest versuchen die libs nicht über die projecteinstellungen einzubinden
    sondern in der StdAfx.h via

    #pragma comment(lib, "*.lib");



  • H. Reinhard schrieb:

    woran kann das liegen? also ich möchte schon die "Static Library" verwenden
    damit mein Programm auch ohne Probleme auf Rechnern läuft wo kein MFC
    installiert ist!

    Du musst auch die C-Runtime in den Projekteinstellungen auf "statisch" umstellen...



  • @LowFly

    nein leider kommt dann der selbe fehler!
    woran liegt das? 😕

    @Jochen Kalmbach
    danke^^
    aber genau das möchte ich ja machen und dabei treten dann die fehler auf!



  • hmm,
    ich kann jetzt echt nur raten aber wenn du dein project auf
    Use MFC in a Static Library umstellst, nutzt der mfc anscheined die
    msvcrtd- mfc42d- mfcs42d- *.lib's diese beinhalten funktionen die die auch in den cimage- jpeg- png- zlib- *.libs vorkommen.

    somit werden funktionen doppelt deklariert und damit kommt der compiler nicht klar.
    versuch halt mal die *.lib's die dir der compiler ankreidet mit /NODEFAULTLIB: unter den Projecteinstellungen auszuschliesen. (frag mich aber bitte nicht wo, hab selbst damit noch nicht gearbeitet)

    /NODEFAULTLIB:msvcrtd.lib
    /NODEFAULTLIB:mfc42d.lib
    /NODEFAULTLIB:mfcs42d.lib

    oder evtel

    /NODEFAULTLIB:msvcrtd.lib mfc42d.lib mfcs42d.lib

    bzw.

    /NODEFAULTLIB:msvcrtd.lib,mfc42d.lib,mfcs42d.lib

    alternativ

    /NODEFAULTLIB:msvcrtd.lib;mfc42d.lib;mfcs42d.lib

    einfach mal ein bischen rumspielen

    ich denke du must es nur schaffen die msvcrtd- mfc42d- mfcs42d- *.lib's aus der erstellung des projectes auszuschließen dann sollte es gehn.

    LowFly



  • @LowFly

    ja also wenn ich unter den Projekteinstellungen bei Linker

    /NODEFAULTLIB:msvcrtd.lib;mfc42d.lib;mfcs42d.lib
    

    beifüge kommen diese fehler hier nicht mehr:

    LINK : warning LNK4098: defaultlib "mfc42d.lib" conflicts with use of other libs; use /NODEFAULTLIB:library
    LINK : warning LNK4098: defaultlib "mfcs42d.lib" conflicts with use of other libs; use /NODEFAULTLIB:library
    LINK : warning LNK4098: defaultlib "msvcrtd.lib" conflicts with use of other libs; use /NODEFAULTLIB:library
    

    das ist allerdings nur ein kleiner trost 😉 denn nun kommen 30 fehler:

    LINK : warning LNK4049: locally defined symbol "_fclose" imported
    LINK : warning LNK4049: locally defined symbol "_strncmp" imported
    LINK : warning LNK4049: locally defined symbol "_fflush" imported
    LINK : warning LNK4049: locally defined symbol "_memmove" imported
    LINK : warning LNK4049: locally defined symbol "_exit" imported
    LINK : warning LNK4049: locally defined symbol "__iob" imported
    LINK : warning LNK4049: locally defined symbol "_sprintf" imported
    LINK : warning LNK4049: locally defined symbol "_getenv" imported
    LINK : warning LNK4049: locally defined symbol "_malloc" imported
    LINK : warning LNK4049: locally defined symbol "_free" imported
    LINK : warning LNK4049: locally defined symbol "_gmtime" imported
    LINK : warning LNK4049: locally defined symbol "_calloc" imported
    LINK : warning LNK4049: locally defined symbol "__strcmpi" imported
    cimage.lib(Gifdecod.obj) : error LNK2001: unresolved external symbol __afxForceSTDAFX
    cimage.lib(cmap.obj) : error LNK2001: unresolved external symbol __afxForceSTDAFX
    cimage.lib(Imagif.obj) : error LNK2001: unresolved external symbol __afxForceSTDAFX
    cimage.lib(Imapng.obj) : error LNK2001: unresolved external symbol __afxForceSTDAFX
    cimage.lib(Dibutils.obj) : error LNK2001: unresolved external symbol __afxForceSTDAFX
    cimage.lib(cimage.obj) : error LNK2001: unresolved external symbol __afxForceSTDAFX
    cimage.lib(Imabmp.obj) : error LNK2001: unresolved external symbol __afxForceSTDAFX
    cimage.lib(cimageb.obj) : error LNK2001: unresolved external symbol __afxForceSTDAFX
    cimage.lib(Imajpg.obj) : error LNK2001: unresolved external symbol __afxForceSTDAFX
    cimage.lib(cimage.obj) : error LNK2001: unresolved external symbol __imp__strcmpi
    OLDNAMES.lib(strcmpi.obi) : error LNK2001: unresolved external symbol __imp__strcmpi
    cimage.lib(Imajpg.obj) : error LNK2001: unresolved external symbol __imp__fopen
    cimage.lib(Imagif.obj) : error LNK2001: unresolved external symbol __imp__fopen
    cimage.lib(Imapng.obj) : error LNK2001: unresolved external symbol __imp__fopen
    cimage.lib(Imajpg.obj) : error LNK2001: unresolved external symbol __imp__longjmp
    cimage.lib(Imapng.obj) : error LNK2001: unresolved external symbol __imp__longjmp
    png.lib(Pngerror.obj) : error LNK2001: unresolved external symbol __imp__longjmp
    cimage.lib(Imagif.obj) : error LNK2001: unresolved external symbol __imp__fseek
    cimage.lib(Imagif.obj) : error LNK2001: unresolved external symbol __imp__fread
    jpeg.lib(Jdatasrc.obj) : error LNK2001: unresolved external symbol __imp__fread
    png.lib(Pngrio.obj) : error LNK2001: unresolved external symbol __imp__fread
    cimage.lib(Imagif.obj) : error LNK2001: unresolved external symbol __imp__fputc
    cimage.lib(Imagif.obj) : error LNK2001: unresolved external symbol __imp__fwrite
    jpeg.lib(Jdatadst.obj) : error LNK2001: unresolved external symbol __imp__fwrite
    png.lib(Pngwio.obj) : error LNK2001: unresolved external symbol __imp__fwrite
    jpeg.lib(Jerror.obj) : error LNK2001: unresolved external symbol __imp__fprintf
    png.lib(Pngerror.obj) : error LNK2001: unresolved external symbol __imp__fprintf
    png.lib(Pngrutil.obj) : error LNK2001: unresolved external symbol __imp__fprintf
    jpeg.lib(Jmemmgr.obj) : error LNK2001: unresolved external symbol __imp__sscanf
    

    ich habe alles aus einem Demo-Projekt
    ( http://www.babelduo.de/cimage.zip )

    bei diesem Demo-Projekt treten diese Fehler leider auch auf wenn ich auf
    "Statisch" umstelle :-|



  • die warnungen kanste eigendlich vergessen die machen erstmal nix

    unresolved external symbol

    heist auf deutsch

    nicht aufgelöstest externes symbol

    meistens kommt der fehler wenn irgendwo funktionen angesprochen werden die im project nicht deklariert oder aufgelöst sind.

    entweder sind diese funktionen in den *.lib's die du gerade ausgeschloßen hast 😡 🙂 😃
    was ich erstmal nicht glaube.

    oder aber du brauchst für die cimage- jpeg- png- zlib- *.libs noch header die du in dein project mit einbinden must.

    also kuck mal ob du bei deinen sdk's nicht irgendwo header findest die vermisten functionen deklarieren.

    die funktion __afxForceSTDAFX hab ich zB unter
    C:\Programme\Microsoft Visual Studio\VC98\MFC\Include
    in der AFX.H gefunden

    die anderen functionen hab ich leider nicht in den SDK's gefunden die ich so hab allerdings hab ich auch noch nie mit cimage- jpeg- png- zlib- *.libs gearbeitet ich denke das die header in den entsprechenden include verzeichnissen der jeweiligen SDK sind die die cimage- jpeg- png- zlib- *.libs beinhaltet. diese halt ins project includen.

    wenns dann nicht klappt gehn mir langsam die ideen aus 😉

    LowFly


Log in to reply