error LNK2019



  • Vielen Dank für die Antwort! Aber so geht es scheinbar auch nicht. Ich habe

    #include "memUtil.c"
    

    eingefügt und das Ergebnis ist dasselbe. Ich habe auch noch nie gesehen, daß C-Files inkludiert werden... Oder meintest Du etwas anderes?


  • Mod

    Du musst die memutil.c in Dein Projekt mit aufnehmen!

    Nicht als include verwenden!



  • ich schon bin im Projekt-Explorer auf das Projekt gegangen und habe im Kontextmenue "Hizufügen einer vorhandenen Resource" gemacht - sowohl mit dem C-als dem H-File. Meinst Du das?



  • Vielleicht wäre es gut, wenn Du uns verrätst welche nicht aufgelösten externe Symbole genau gemeldet werden.

    Auch entsprechende Quelltextauszüge machen oft Sinn.



  • Es handelt sich um einen normalen Funktionsaufruf. Die Funktion ist im c-File definiert und im h-File deklariert. Das h-File ist vor dem Aufruf eingebunden.



  • Rudi Ratlos schrieb:

    ich schon bin im Projekt-Explorer auf das Projekt gegangen und habe im Kontextmenue "Hizufügen einer vorhandenen Resource" gemacht - sowohl mit dem C-als dem H-File. Meinst Du das?

    Du wartest jetzt nicht wirklich seit 3 Tagen darauf, dass dir das jemand bestätigt, oder?



  • keine Ahnung in welchen Abständen, die Leute in das Forum schauen - ich hoffe einfach, daß irgendjemand einen nützlichen Hinweis für mich hat. Vielleicht ist ja etwas ganz Einfaches, daß man halt nur wissen muß - ein Bug vielleicht...



  • Bist du sicher das "Ressource" auch Quellcode Datei bedeutet und nicht "Ressource" ?
    Schreib einfach mal wild in diesem Sourcefile rum (so dass du es danach wieder rückgängig machen kannst!). Wenn Compilerfehler kommen hast du es wohl richtig eingebunden.

    Sicher dass GENAU die Funktion die aufgerufen ist auch im sourcefile vorkommt (genau die selben Parameter usw.) ?

    ein Bug vielleicht

    Wohl kaum.

    Vielleicht wäre es gut, wenn Du uns verrätst welche nicht aufgelösten externe Symbole genau gemeldet werden.

    Auch entsprechende Quelltextauszüge machen oft Sinn.

    Überlesen ? Ist nämlich ein guter Tipp.



  • CRCValue = crc_CalculateCrc64(StartValue, TestVector, (ADDRESS) TestVectorInv, DataLength);
    

    und hier die Fehlermeldung:

    1>Verknüpfen...
    1>AuxiliarySoftwareCheckDlg.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""unsigned __int64 __cdecl crc_CalculateCrc64(unsigned __int64,unsigned char const * const,unsigned long,unsigned long)" (?crc_CalculateCrc64@@YA_K_KQBEKK@Z)".
    1>G:\VC 2005\TestProjekte\Check\AuxiliarySoftwareCheck\Debug\AuxiliarySoftwareCheck.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
    1>Das Buildprotokoll wurde unter "file://g:\VC 2005\TestProjekte\Check\AuxiliarySoftwareCheck\AuxiliarySoftwareCheck\Debug\BuildLog.htm" gespeichert.
    1>AuxiliarySoftwareCheck - 2 Fehler, 1 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
    


  • Und das bringt uns jetzt genau was ? Ohne die Funktionsdefinition NICHTS... 🙄

    **Bist du sicher das "Ressource" auch Quellcode Datei bedeutet und nicht "Ressource" ?
    Schreib einfach mal wild in diesem Sourcefile rum (so dass du es danach wieder rückgängig machen kannst!). Wenn Compilerfehler kommen hast du es wohl richtig eingebunden.

    Sicher dass GENAU die Funktion die aufgerufen ist auch im sourcefile vorkommt (genau die selben Parameter usw.) ?**



  • Um blöde Fehler auszuschließen und die Sache zu vereinfachen habe hier ein ähnliches Beispiel des Fehlers. Das läuft systematisch irgendetwas schief:
    Zuerst die Deklaration:

    unsigned int crc32_check(unsigned int StartValue, unsigned char *StartAddress, unsigned int Size);
    

    Dann der Code:

    i = crc32_check(uintStartValue, auchrTestVector, uintDataLength);
    

    Und zuletzt das Ergebnis:

    1>------ Erstellen gestartet: Projekt: AuxiliarySoftwareCheck, Konfiguration: Debug Win32 ------
    1>Kompilieren...
    1>AuxiliarySoftwareCheckDlg.cpp
    1>Verknüpfen...
    1>nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) ist bereits in LIBCMTD.lib(dbgdel.obj) definiert.
    1>AuxiliarySoftwareCheckDlg.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""unsigned int __cdecl crc32_check(unsigned int,unsigned char *,unsigned int)" (?crc32_check@@YAIIPAEI@Z)" in Funktion ""public: void __thiscall CAuxiliarySoftwareCheckDlg::OnCRCR(void)" (?OnCRCR@CAuxiliarySoftwareCheckDlg@@QAEXXZ)".
    1>G:\VC 2005\TestProjekte\Check\AuxiliarySoftwareCheck\Debug\AuxiliarySoftwareCheck.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
    1>Das Buildprotokoll wurde unter "file://g:\VC 2005\TestProjekte\Check\AuxiliarySoftwareCheck\AuxiliarySoftwareCheck\Debug\BuildLog.htm" gespeichert.
    1>AuxiliarySoftwareCheck - 3 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
    

    Ich habe außerdem sichergestellt, daß die Funktion aus dem eingebundenen File (crc.c) auch wirklich kompiliert und verwendet wird. Hier tritt jetzt sogar noch ein Fehler auf: "LNK2005"! Das ist mir alles ein Rätsel... 😕


  • Mod

    Rudi Ratlos schrieb:

    ich schon bin im Projekt-Explorer auf das Projekt gegangen und habe im Kontextmenue "Hizufügen einer vorhandenen Resource" gemacht - sowohl mit dem C-als dem H-File. Meinst Du das?

    Ausprobieren kostet nichts. 😉



  • Wenn ich "crc.c" include statt "crc.h", dann gibt es kein nicht aufgelöstes Symbol mehr! Allerdings bleibt noch die Mehrfachdeklaration:

    1>------ Erstellen gestartet: Projekt: AuxiliarySoftwareCheck, Konfiguration: Debug Win32 ------
    1>Kompilieren...
    1>AuxiliarySoftwareCheckDlg.cpp
    1>g:\vc 2005\testprojekte\check\auxiliarysoftwarecheck\auxiliarysoftwarecheck\crc.c(438) : warning C4311: 'Typumwandlung': Zeigerverkürzung von 'const UINT8 *__w64 ' zu 'ADDRESS'
    1>Verknüpfen...
    1>nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) ist bereits in LIBCMTD.lib(dbgdel.obj) definiert.
    1>G:\VC 2005\TestProjekte\Check\AuxiliarySoftwareCheck\Debug\AuxiliarySoftwareCheck.exe : fatal error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden.
    1>Das Buildprotokoll wurde unter "file://g:\VC 2005\TestProjekte\Check\AuxiliarySoftwareCheck\AuxiliarySoftwareCheck\Debug\BuildLog.htm" gespeichert.
    1>AuxiliarySoftwareCheck - 2 Fehler, 1 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
    

    Was soll denn das überhaupt für ein Symbol sein? 😕



  • Kein include für Sourcefiles!! 🙄
    Irgendwas machst du komplett falsch.
    Erstell mal ein neues Projekt und füg alle Dateien richtig(!) hinzu.



  • Nimm doch bitte einfach das .c und .h File und zieh sie aus dem Explorer in das entsprechende Projekt-Verzeichnis in Visual Studio (Source Files bzw. Header Files Ordner des Projekts im Solution Explorer).



  • Ich werd' noch einen Anlauf machen und ein weiteres Projekt erstellen - das wär' dann das Dritte!
    Diesmal werd ich die Sourcen wie empfohlen aus dem Explorer in den Projekt-Explorer ziehen:

    hustbaer schrieb:

    Nimm doch bitte einfach das .c und .h File und zieh sie aus dem Explorer in das entsprechende Projekt-Verzeichnis in Visual Studio (Source Files bzw. Header Files Ordner des Projekts im Solution Explorer).

    Mal sehen was dabei rauskommt

    DarkShadow44 schrieb:

    Kein include für Sourcefiles!! 🙄
    Irgendwas machst du komplett falsch.
    Erstell mal ein neues Projekt und füg alle Dateien richtig(!) hinzu.

    OK -C-Files includeren ist Mist, aber wenn's VC2005 verlangt!?! Ich habe das C-File in crc.cpp umbenannt und wieder nur das H-File eingebunden und siehe da - dann geht's!! Allerdings bleibt das Problem mit den mehrfach definierten Symbolen... 😞
    Daher werd' ich's nochmal probieren (s. oben) 🙄Was heißt aber eigentlich "richtig" hinzufügen?!?



  • OK -C-Files includeren ist Mist, aber wenn's VC2005 verlangt!
    

    Wenn VC2005 nicht zulässt dass du sources normal hinzufügst sonder nur durch include, dann haust du es auf den Müll. 🙄

    Daher werd' ich's nochmal probieren (s. oben) :rolleyes:Was heißt aber eigentlich "richtig" hinzufügen?!?
    

    Das bedeutet dass du der IDE sagst dass die Datei Code enthält und kompiliert werden soll statt sie einfach in irgendeine andere Datei mit reinzumatschen ?

    Zeig mal wo du das Projekt und die anderen Files her hast... Dann kann ich dir haargenau sagen was falsch ist, meine Kristallkugel ist nämlich grad in der Reperatur... 😃



  • Rudi Ratlos schrieb:

    aber wenn's VC2005 verlangt!?!

    Du musst uns alle für sehr dumm halten.
    Ich arbeite seit jahren jeden Tag mit Visual C++ 2005. Und Visual C++ 2005 verlangt ganz sicher nicht dass man .c/.cpp Files includet.

    Man muss sie nur richtig zum Projekt hinzufügen.

    Und das ist auch nicht schwer, bzw. es ist nicht schwer rauszufinden wie es geht.
    Stell dich bitte nicht so an.

    Und noch ein Tip: verwende die englische Version von Visual Studio. Die wenigsten Entwickler haben die deutsche installiert, daher werden dir auch die wenigsten deutsche Namen von irgendwelchen Menupunkten, Buttons, Fenstern etc. sagen können.



  • Nach Anlegen eines neuen Projektes und hinziehen mittels Drag & Drop der h- bzw. cpp-Files hat es tatsächlich geklappt!! Ich habe mir dann mal die Mühe gemacht, das alte und das neue Projekt zu vergleichen (Eigenschaften der Projekte), konnte aber keinen Unterschied finden, außer halt das es einmal funktioniert und einmal nicht...

    Aber zumindest habe ich jetzt eine Methode zur Einbindung externer Sourcen, die funktioniert!

    Ich möchte ich mich an dieser Stelle bei allen, die sich mit meinem Problem beschäftigt und mir eine Antwort geschrieben habe sehr herzlich bedanken! Ohne diese Tips wäre ich wohl eher nicht weiter gekommen!

    Ich halte sicher niemanden für dumm, der sich die Mühe macht und in diesem Forum die Probleme anderer Leute lößen hilft.
    Sorry, wenn sich jemand angegriffen gefühlt hat! War sicher nicht meine Absicht!
    Ich habe wohl meinen Unmut über die, wie ich finde, bedienerunfreundlich Entwicklungsumgebung zu sehr freien Lauf gelassen. Für mich ist VC2005 eben ein Werkzeug wie viele andere Dinge auch und ich möchte von dessen Internas (zu denen ich auch die Frage wie irgendetwas gelinkt wird zähle) möglichst verschont bleiben. Ich möchte einfach nur ein Programm schreiben das irgendein Problem lößt und nicht erst noch die Struktur des dazu notwendigen Werkzeugs ergründen müssen. Also nichts für ungut.


Anmelden zum Antworten