Linker nervt: LNK2001 = ist das einfach ein böser scherz?



  • Leute hilfe, diese verfluchte fehlermeldungen machen mich einfach fertig!!! 😡 😡 😡
    Andauernd tauchen diese "LNK2001: unresolved external symbol" aus dem nichts auf 😡 , völlig ohne irgendeiner ursache 😮 , einfach so, weil compiler grad schlecht gelaunt ist... 😡 was das für n fehler ist hab ich mir durchgelesen, alles schön und gut, aber in dem code gibt es einfach keinen platz für solche fehler!!! das programm funktioniert hervorragend, alles klappt prima, aber kaum ändert man messageBoxCaption oder irgendsowas völlig bedeutungsloses, da treten plötzlich diese fehler auf!!! Und nach mehrfachem ein-und ausschalten des programms, neustarts des pc's geht alles wieder plötzlich, aber ich verliere jedes mal ne viertel stunde mit diesem "pc-wachrütteln"= das n_e_r_v_t !!! 😞
    Könnt ihr mir bitte irgendwie helfen? (ansonsten ruf ich gleich die polizei an und melde schon mal einen gekillten computer !!! 😮 )



  • ein linkerfehler bedeutet, dass er den "körper" einer funktion nicht findet.
    wo auch immer sie sich befindet.
    es kann das einbinden einer lib fehlen, oder du haust dir eine datei vom projekt weg, in der die definition einer funktion oder implementierung einer methode steht, oder du hast einfach vergessen, sie zu implementieren...

    ich rate, das projekt nochmal neu aufzusetzen, die pfade in ordnung zu bringen, und den linkerfehler mal GENAU zu studieren. der linker sagt nämlich, welche funktionsimplementierung er sucht.


  • Mod

    Oft fehlt nur eine LIB. Das könnte man genauer sagen, wenn Du sagst welche Funktionen angemosert werden. Manchmal fehlt auch ein extern "C" oder ähgnliches.



  • wie gesagt... mit dem programm stimmt alles, alle funktionen, die je deklariert wurden, wurden auch in den entsprechenden .cpp dateien implementiert, oder ich hab keine augen im kopf!

    hier bidde sehr, falls ihr euch höchstpersönlich vergewissern vollt, hier n paar code ausschnitte und äusers seltsame fehlermeldungen:

    WinMain.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: __thiscall D3D9Initializer::~D3D9Initializer(void)" (??1D3D9Initializer@@QAE@XZ)
    
    WinMain.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: bool __thiscall D3D9Initializer::Init(struct HWND__ *,struct HINSTANCE__ *,struct tagRECT *)" (?Init@D3D9Initializer@@QAE_NPAUHWND__@@PAUHINSTANCE__@@PAUtagRECT@@@Z)
    
    WinMain.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: __thiscall D3D9Initializer::D3D9Initializer(void)" (??0D3D9Initializer@@QAE@XZ)
    Debug/BLLtyukiand88.exe : fatal error LNK1120: 3 unaufgeloeste externe Verweise
    

    hier bitte schön, die D3D9Initializer.hpp:

    #include <iostream>
    #include <windows.h>
    #include <d3d9.h>
    #include "D3D9ParametersStruct.hpp"
    
    //#ifndef D3D9INITIALIZER_HPP
    //#define D3D9INITIALIZER_HPP
    
    //D3D9Initializer
    class D3D9Initializer
    {
    public:
    
    	//public member variables
    	IDirect3D9 *pD3D; //pointer on the Direct3D Interface
    	SD3D9Parameters parameters; //d3dDevice params
    	HWND hTargetWindow; //handle to the "STATIC" child window
    	RECT targetWindowBounds; //width and height of the child window
    
    	//constructor: empty, is just there so its easier to access 
             //methods while writing source
    	D3D9Initializer();
    	//cleanup before destroying
    	~D3D9Initializer();
    
    	//methods declaration
    	bool Init(HWND hMainWindow,HINSTANCE hInstance, RECT *bounds);
    	//creates child window, defines pD3D and D3D9Device,
             //opens dialog if necessary
    	bool Exit();
    	//cleaning up, deleting windows, releasing d3d interfaces
    
    	//dialog proc (member method, because needs access to pD3D)
    	static BOOL CALLBACK D3D9ParametersDlgProc(HWND hWnd, UINT msg,
                                               WPARAM wParam, LPARAM lParam);
    	//D3D9Parameters dialog procedure
    
    };//D3D9Initializer
    
    //#endif
    

    und schließlich das entsprechende D3D9Initializer.cpp:

    // D3D9Initializer.cpp
    
    #include <windows.h>
    #include <d3d9.h>
    #include <iostream>
    #include <fstream>
    #include "D3D9Initializer.hpp"
    #include "D3D9ParameterOptions.hpp"
    #include "D3D9ParametersStruct.hpp"
    #include "Macros.hpp"
    #include "resource.h"
    
    #ifndef D3D9INITIALIZER_CPP
    #define D3D9INITIALIZER_CPP
    #define ID_TARGET_WINDOW 10000
    
    //definitions of methods
    D3D9Initializer::D3D9Initializer(){
    	//empty constructor
    }
    
    D3D9Initializer::~D3D9Initializer(){
    	//cleanup by Exit()
    	Exit();
    }
    
    //777777777777777777777777777777777---Init()---777777777777777777777777777777777777777777
    
    bool D3D9Initializer::Init(HWND hMainWindow, HINSTANCE hInstance, RECT *bounds){
    
    	//create window
    	hTargetWindow=CreateWindow("STATIC",
    								"Target window",
    								WS_CHILD|WS_VISIBLE,
    								bounds->left, bounds->top,
    								(bounds->right-bounds->left),(bounds->bottom-bounds->top),
    								hMainWindow,
    								(HMENU)ID_TARGET_WINDOW,
    								hInstance,
    								NULL);
    
    	//pD3D definition
    	pD3D=Direct3DCreate9(D3D_SDK_VERSION);
    	if(!pD3D){
    		MessageBox(NULL,"Fehler beim Initialisieren von Direct3D9. \n"
    			"Damit das Programm ausgeführt werden kann, wird mindestens DirectX 9.0 benötigt.",
    			"DirectX Fehler", MB_OK | MB_ICONEXCLAMATION);
    		return false;
    	}
    
    	//check if setting file exists
    	std::ifstream Input("D3D9Parameters.prm",std::ios::binary);
    	if(Input==NULL){
    
    		//file does not exist, start setup dialog
    		MessageBox(NULL,"Datei existiert nicht","File not found",MB_OK|MB_ICONINFORMATION);
    
    		HWND hDlg=CreateDialog(GetModuleHandle(NULL),
    				  MAKEINTRESOURCE(IDD_D3D9PARAMETERS),
    				  NULL,
    				  this->D3D9ParametersDlgProc);
    		SetWindowLong(hDlg, DWL_USER, reinterpret_cast<LONG>(this) );
    		ShowWindow(hDlg, SW_SHOW);
    
    	}else{
    
    		Input.read((char*) &parameters, sizeof(parameters));
    
    	}
    	Input.close();
    
    	return true;
    
    }//Init()
    
    bool D3D9Initializer::Exit(){
    	pD3D->Release();
    	return true;
    }//Exit()
    
    //00000000000000000000000000000---DlgProc()---000000000000000000000000000000000000000
    
    BOOL CALLBACK D3D9Initializer::D3D9ParametersDlgProc(HWND hDlg,
    													UINT msg,
    													WPARAM wParam,
    													LPARAM lParam){
    
    	D3D9Initializer *pInitializer=
    		reinterpret_cast<D3D9Initializer*>(GetWindowLong(hDlg,DWL_USER));
    
    	switch(msg){
    	case WM_INITDIALOG:
    	{
    
    		//do nothing
    		return TRUE;
    	}
    	case WM_SHOWWINDOW://==========================================DlgProc=SHOWWINDOW
    	{
    
    		if(pInitializer!=0){
    			//fill combobox
    			EnumAdapters(hDlg, pInitializer->pD3D);
    			DEBUG_OUT("Adapter wurden aufgezählt");
    		}else{
    			MB_ERR("Adapter konnten nicht aufgelistet werden");
    		}
    		return TRUE;
    	}
    	case WM_COMMAND:
    	{
    		switch(LOWORD(wParam)){
    		case IDOK:
    			EndDialog(hDlg,0);
    			return TRUE;
    		case IDC_ADAPTER:
    			switch(HIWORD(wParam)){
    			case CBN_SELCHANGE://===================================DlgProc=SELCHANGE
    				//get Adapter-ID
    				int iAdapterID=SendDlgItemMessage(hDlg,
    												  IDC_ADAPTER,
    												  CB_GETCURSEL,
    												  0,0);
    				char szText[16];
    				sprintf(szText, "AdapterID=%i",iAdapterID);
    				DEBUG_OUT(szText);
    				return TRUE;
                                  }
    
    		}
    	}
    	}
    	return FALSE;
    
    }//D3D9ParametersDlgProc
    
    #endif
    

    also wenn in diesem .cpp der Destructor, Init() oder der konstruktor nicht zu finden sind, dann weiß ich auch nicht, wie mir noch zu helfen ist 😮



  • Gar keine Ideen oder vorschläge? 😞
    und was mach ich jetzt 😕

    wie soll ich etwas reparieren, was nicht kaputt ist??? 😞



  • MSVC?
    Lösch mal die .sln und .vcproj und erstell sie neu, vielleicht hilft's ja.

    Greetz, Swordfish



  • projekt neu anlegen und die implementierungscpp richtig mit dazufügen.

    wenn das projekt sie nicht kennt, findet der linker nüscht.



  • @ swordfish: ookay, thx fürn tipp, ich werds gleich versuchen
    oh.. cool, jetzt hab ichs versucht, bin aber nicht weit gekommen... wo sollen denn die dateien zu finden sein? 🙄
    @ elise: ne, ist nich der fall:
    1. Cpp wurde gleich beim erstellen dem project hinzugefügt
    2. Das programm hat schon -zig mal prima funktioniert, bevor die fehler auftraten
    3. wegen der Exit() funktion gibt es aus irgendeinem grund keine fehlermeldungen, obwohl die sich rein formal durch gra nix von der Init() unterscheidet...

    hm, die idee mitm project neu anlegen ist wohl gar nicht ma so verkehrt, obwohl ein bissl umständlich, und auf dauer auch nervig... aber ich werds auch versuchen, was anderes bleibt mir ja wohl nicht übrig... thx! 🤡

    😞 ööööhhh.... danke für die ideen schon mal 👍



  • 😮 😮 😮 😮 😮 😮 😮 😮 😮
    *exact 9 smilies, nicht mehr und nicht weniger*
    AAAAAA, ICH HALTS NICHT MEHR AAAUUUS!!! *wütendHerumbrüll* *tastaturGegenDieWandSchmeiss* *durchDieGegendRennAllesNiederbrenn*

    ...

    tut mir leid leute, aber ich bin wirklich am ausrasten, ich habe wegen dieser $©héíß3 einen ganzen tag verloren, und bin jetzt mehr am verzweifeln als vorher: habe das project neu angelegt, habe alle dateien reinkopiert, jetzt lässt sich die resource nicht wiederherstellen... hab eine neue newResource.rc datei erstellt=fehlt wieder der header... => fehlerhagel...

    dreifach "ƒuck"
    😞 *der 10. smilie*



  • dateien kann man nicht in ein projekt "hineinkopieren", sondern sie müssen über eine entwicklungsumgebung dem projekt "hinzugefügt" werden, damit die projektdatei (oder die makedatei) die entsprechenden übersetzungseinheiten zusammenlinken kann.

    wie am anfang schon gesehen: eine datei, die zwar im projektordner "liegt", aber von der projektdatei (dem makefile oder sonstigem) nicht gekannt wird, wird auch nicht mit übersetzt und gelinkt.

    ich vermute, hier liegt dieses problem vor.



  • @ nein, auf keinen fall...
    1. ich hab ein komplett neues project erstellt
    2. ich hab da nicht die dateien rüberkopiert, sondern neue leere dateien mit den selben dateinamen erstellt, und den quellcode reinkopiert und alles neukompiliert=> kann auf gar keinen fall daran liegen, ausgeschlossen 😞



  • kannst du das projekt uploaden?



  • S - U - P - E - R - G - E - I - L

    hab des ganze heute morgen einfach nochmal kompiliert... einfach nur kompiliert, gar nicht verändert, gelöscht oder neuerstellt... einfach das ursprüngliche project genommen und aus das rote ausrufezeichen geklickt...
    keine linker fehler... kein stress, kein qualm am horizont, alles vollkommen in ordnung, programm läuft wieder... diese..., dieses..., das... *taboo ausdrücke*..., deswegen habe ich einen ganzen tag zeit verloren, weil nix ging, und jetzt tut des ding so als wär nichts!!! 😡 😡 😡

    also, ich meine:

    int main(){
      Compiler.Stirb(CPSTIRB_QUALVOLL | CPSTIRB_LANGSAM);
      return 999;
    }
    

    sowas kann man doch 100000 mal kompilieren, da wird es IMMER einen fehler geben! und bei meinem project hängt es also davon ab wie der pc grad gelaunt ist oder wie? Ich geh ma in die dunkle ecke, eine runde heulen... 😞

    tut mir echt leid, dass ich da so rumgestresst habe, danke nochmal für eure unterstützung leute! 🙄



  • Andrey schrieb:

    und bei meinem project hängt es also davon ab wie der pc grad gelaunt ist oder wie?

    Willkommen im Club. 👍 😃

    Reg Dich ab und wisse: ⚠ Solche Probleme hatte wohl schon jeder Programmierer, der eine komplexere IDE benutzt- ausgenommen vielleicht die DEV-C++-User 👍 ...

    Es ist ein Irrtum zu glauben, der Computer täte das, was Du ihm befielst. In wirklichkeit tust Du das, was er Dir befielt:

    *wütendHerumbrüll* *tastaturGegenDieWandSchmeiss* *durchDieGegendRennAllesNiederbrenn*

    🕶
    Don't worry, be happy.



  • Elektronix schrieb:

    Reg Dich ab und wisse: ⚠ Solche Probleme hatte wohl schon jeder Programmierer, der eine komplexere IDE benutzt- ausgenommen vielleicht die DEV-C++-User 👍 ...

    Tz, ich verwende seit Ewigkeiten verschiedene Versionen des MSVS und bin glücklich...

    Greetz, Swordfish



  • @swordfish: tjo, da haste wohl einfach glück gehabt! 😃
    @elektronix: bhehehehhee, als ob ich solche ähnliche probleme nicht schon ma gehabt hätte, als java hobbyprogger wurde ich von der eclipse leider auch nicht verschont, und dachte eigentlich, dass mich gar nix mehr aus der ruhe bringen kann, hab mich wohl doch geirrt... 😞



  • @swordfish: tjo, da haste wohl einfach glück gehabt!

    Das stimmt...Ich habe diese merkwürdigen Linkerfehler auch öfters...
    Wenn ich ein Projekt lade und kompilieren will, bekomm ich diese Fehler auch manchmal...auch wenn ich das Projekt am Vortag kompilieren und ausführen konnte...
    Oder wenn ich ein neues Projekt erstelle und dann alten Code hineinkopiere, treten diese Fehler auch auf...
    Aber meistens irgendwelche die nichtmal irgendwie etwas mit dem Projekt gemeinsam haben 😡



  • Kuldren schrieb:

    @swordfish: tjo, da haste wohl einfach glück gehabt!

    Das stimmt...Ich habe diese merkwürdigen Linkerfehler auch öfters...
    Wenn ich ein Projekt lade und kompilieren will, bekomm ich diese Fehler auch manchmal...auch wenn ich das Projekt am Vortag kompilieren und ausführen konnte...
    Oder wenn ich ein neues Projekt erstelle und dann alten Code hineinkopiere, treten diese Fehler auch auf...
    Aber meistens irgendwelche die nichtmal irgendwie etwas mit dem Projekt gemeinsam haben 😡

    Vllt. hab ihr ja Tiere im PC 😃

    ...

    Mal im Ernst was für n Compiler habt ihr denn ? (kb alles durchzulesen :p )



  • Kuldren schrieb:

    [...] Ich habe diese merkwürdigen Linkerfehler auch öfters...
    Wenn ich ein Projekt lade und kompilieren will, bekomm ich diese Fehler auch manchmal... auch wenn ich das Projekt am Vortag kompilieren und ausführen konnte...
    Oder wenn ich ein neues Projekt erstelle und dann alten Code hineinkopiere, treten diese Fehler auch auf...
    Aber meistens irgendwelche die nichtmal irgendwie etwas mit dem Projekt gemeinsam haben 😡

    Welche IDE / Compiler denn!?
    Ich befürchte, dass der Fehler wieder 'mal ca. 60 cm vor der Tastatur sitzt. 😉

    Greetz, Swordfish



  • Welche IDE / Compiler denn!?

    MSVS 6.0

    und...

    Ich befürchte, dass der Fehler wieder 'mal ca. 60 cm vor der Tastatur sitzt.

    Wenn das Projekt am Vortag richtig kompiliert und ausgeführt werden konnte und dann (wohlgemerkt: unverändert!) nicht kompiliert werden kann ohne dass ich irgendwelche Linkerfehlermeldungen bekomme, kann ich ja wohl nichts dafür 💡 ...
    Denn nach einem bzw. zwei Neustart(s) kann das Projekt wieder kompiliert werden (Ohne Linkerfehler)!


Log in to reply