Warum denn <error LNK2001: > ?



  • Guten Abend !

    Ich lege eine neue cpp Datei mit der entsprechenden Header an.
    Schreibe ganz vorschriftsmäßig meinen Code hinein, kompiliere es zum Test und alles klappt wunderbar. Dann bitte ich die Header Datei in ein ganz andere cpp Datei ein, da dort dieser benötigt wird. Diese Datei kompiliere ich auch - klappt wunderbar. Jetzt möchte ich aber das gesamte Projekt kompilieren (Exe erstellen) un dann erhalte ich diesen Fehler:

    Linker-Vorgang läuft...
    rpdata.obj : error LNK2001: Nichtaufgeloestes externes Symbol "void __fastcall cryptrc4(struct RC4Ctx *,unsigned char *,unsigned int)" (?cryptrc4@@YIXPAURC4Ctx@@PAEI@Z)
    rpdata.obj : error LNK2001: Nichtaufgeloestes externes Symbol "void __fastcall initrc4(struct RC4Ctx *,unsigned char *,unsigned int)" (?initrc4@@YIXPAURC4Ctx@@PAEI@Z)
    Debug/myprng.exe : fatal error LNK1120: 2 unaufgeloeste externe Verweise
    Fehler beim Ausführen von link.exe
    

    Was mache ich falsch, denn ich hatt das schon öfters !? 😕



  • Du willst in deinem Programm die folgenden beiden Routinen cryptrc4 initrc4 benutzen, aber sie sind für den Linker
    (das Programm was die einzelnen Programmteil zsammenfügt) nicht vorhanden.

    In Welchem file /lib stehen diese Routinen.
    Falls es Sources hast du sie im projekt zu den anderen Sources gestellt
    Falls sie in einer lib (.dll,.lb) sind hast du das entsprechende File dazugelinkt
    Auch für die Dll´s mußt du die zugehörigen *.lib Files mit in das Projekt aufnehem, dies LibFiles
    haben nur Verwaltungsinformationen für den linker der Code steht in den Dll´s

    ich hoffe ich konnte helfen, falls nicht frag einfach noch mal



  • PAD schrieb:

    In Welchem file /lib stehen diese Routinen

    In keiner Dll oder keiner Lib. Es sind einfache cpp-Quellcodedatei(en) meines Projekts (Konsolenanwendung).

    PAD schrieb:

    Falls es Sources hast du sie im projekt zu den anderen Sources gestellt

    Ja. ganz normal über die eigene Header-Datei eingebunden.

    Also ich habe keine Ahnung warum das nicht klappt. Wenn ich die Header-Datei in eine andere Quelldatei einbinde funktioniert es.



  • Ich habe jetzt den Fehler gefunden.
    Und zwar hatte ich die Funktionen der xyz.cpp/xyz.h als inline definiert. Danach habe ich die xyz.h in der abc.cpp eingebunden und dann hat der Linker gemeckert(?). Anschließend (eben gerade) habe ich das inline entfernt und siehe da ... es klappt einwandfrei.

    Warum kann man keine "dateiübergreifenden" inline Funktionen definieren ?

    Wo ist der Unterschied zwischen

    inline         /* Klar, ein regulärer C++ Bestandteil */
    __inline       /* Microsoft Specific ??? */
    __forceinline  /* Microsoft Specific ??? */
    

    Was heißt denn Microsoft Specific außer das es das nur im M$ Compiler gibt ?


Anmelden zum Antworten