Fehlerbehebung? LNK 2001 LNK 1120
-
Hallo erstmal, ich hoffe das ich mich nach ausführlichem Beschäftige mit der Suchfunktion und dem gestrigen Tag mit dem MSDN hier nicht doch etwas überflüssiges Poste.
Ich habe nicht viel Ahnung von C++ und mühe mich noch mit anfängen rum. Vorgestern habe ich aus dem Buch von Christan Roussel Visual C++ und DirectX 9 eine Passage (Capitel 12) durchgearbeitet bei der es für mich erstmalig an die Win32 Anwendung ging. Dabei habe ich gelernt (bzw. ich sollte lernen
) wie man ein erstes Windows Fenster erstellt. Ohne Vorwissen waren da ein haufen neuer Befehle für mich, die ich hier hoffentlich nicht aufzuzählen brauche.
Folgendes Sagt mir das Buch:
return CreateWindowEx(NULL, // Keine erweiterten Stile nutzen "WindowClass", // Klassenname "Hello Windows", // Fenstertitel WS_OVERLAPPEDWINDOW | // Fenster WS_VISIBLE, // Eigenschaften 100, 100, 400, 300, // Anfangsposition und Größe NULL, // Handle des Elternfensters NULL, // Handle des Menüs hInstance, // Anwendungsinstanz NULL); // wird nicht benötigt
Es heißt im Buch selber ich kann an der Stelle für die Fenster-Eigenschafften in MSDN einige Varianten finden. Interessiert und neugierig wie ich war habe ich also Herumexperimentiert. Dabei habe ich unter andere Folgenden Befehl ausführen lassen:
/*WS_OVERLAPPEDWINDOW |*/ // Fenster ... WS_VISIBLE | WS_POPUPWINDOW, // ... Eigenschaften
Dies bewirkte kein neues Fesnter aber irgendetwas muß passiert sein, den seit ich an dieser Stelle im Programmcode herumexperimentiert habe erhalte ich folgende Fehlermeldung:
--------------------Konfiguration: HelloWindows - Win32 Debug--------------------
Linker-Vorgang läuft...
LIBCD.lib(crt0.obj) : error LNK2001: Nichtaufgeloestes externes Symbol _main
Debug/HelloWindows.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.HelloWindows.exe - 2 Fehler, 0 Warnung(en)
Wie schon erwähnt führte die ausführliche Suche in MSDN auf eine Menge von Fehlern von dennen ich nicht einmal 50 % verstehe geschweige denn 10 % umsetzen könnte. Als Konsequenz habe ich es mit der Löschung der verantwortlichen Datei (HelloWindows.cpp - sowie alles dazugehörige) versucht und als auch das nichts half habe ich eine Neuinstallierung von Visual C++ 6.0 Autors Edition vorgenommen. Nach wie vor kann ich zwar Win32 Konsolenanwendungen verwenden jedoch bei jeder beliebigen form von Win32- Anwendung wird der oben aufgezählte Fehler angezeigt.
Ich bin am verzweifeln leider habe ich keinen in meinem Umfeld der sich für solcherlei Sachen interessiert und meine Kommiltonen sind ebenfalls im Urlaub.
Kann mir irgendwer helfen mein C++ wieder zum laufen zu bringen?
Greets Mindmover
-
Der Fehler heißt, du hast eine Funktion im Header deklariert, aber nicht im Cpp geschrieben.
Wo in deinem Programm ist denn überall _main?
-
Also ich habe leider kein Internet zuhause sonst würde ich jetzt nachschauen. Aber genau der Punkt hatte mich auch gestört und ich glaube festgestellt zu haben das ich diesen Befehl _main nirgends verwendet habe. Aber selbst wenn ich ihn verwendet hätte was könnte ich denn damit tun?
Greets Mindmover
-
Was du tun kannst? Nicht benutzen.
Im Ernst: Ich glaube, du hast eher ein Problem mit C++ bzw. der WinAPI.
Der Code sieht jedenfalls nur wenig nach MFC aus.Hast du denn noch eine ältere Version deines Quellcodes? Eine wo es noch compiliert?
Wenn ja, nimm die und untersuche mal, was du geändert hast (geht mit Beyond Compare) oder versuch, die Änderungen nochmal zu machen. Vielleicht hast du einfach eine Zeile gelöscht oder so.Wenn du keine alte Version mehr hast, fallen mir zwei Sachen ein:
Du kommentierst die "böse" Stelle aus, was dir aber wohl nicht viel helfen wird.
Oder du fängst nochmal ein neues Projekt an und versuchst gleich den Befehl einzubauen. Vielleicht behakten sich da alte Versuche mit dem aktuellen.Sonst bin ich so auf Entfernung eher ratlos.
-
estartu_de schrieb:
Was du tun kannst? Nicht benutzen.
Im Ernst: Ich glaube, du hast eher ein Problem mit C++ bzw. der WinAPI.
Der Code sieht jedenfalls nur wenig nach MFC aus.Das wäre möglich wie gesagt bin ich noch unwissender Anfänger. Wenn nötig verschiebe mich einfach ins richtige Forum, Danke!
estartu_de schrieb:
Hast du denn noch eine ältere Version deines Quellcodes? Eine wo es noch compiliert?
Wenn ja, nimm die und untersuche mal, was du geändert hast (geht mit Beyond Compare) oder versuch, die Änderungen nochmal zu machen. Vielleicht hast du einfach eine Zeile gelöscht oder so.Wenn du keine alte Version mehr hast, fallen mir zwei Sachen ein:
Du kommentierst die "böse" Stelle aus, was dir aber wohl nicht viel helfen wird.
Oder du fängst nochmal ein neues Projekt an und versuchst gleich den Befehl einzubauen. Vielleicht behakten sich da alte Versuche mit dem aktuellen.Sonst bin ich so auf Entfernung eher ratlos.
Das Befürchte ich auch. Wie schon erwähnt ich habe dannach versucht die Stelle umzuschreiben und auszukommentieren auch de Urspüngliche Form hat immer wieder den Fhler hevorgerufen.
Was ich viel Fataler finde ist das es eben auf ALLE Win32-Anwendungen zutrifft. Ich kann praktisch nur noch mit Win32-Konsolenanwenungen arbeiten, da selbst eine Neinstallation von VC++ nichts gebracht hat.
Hier habe ich im übrigen nochmal die Funktion gefunden aus der ich vorhin den Teilcode rausgerissen habe:
HWND CreateMainWindow(HINSTANCE hInstance) { WNDCLASSEX wndClass = { sizeof(WNDCLASSEX), //Groesse angeben CS_DBLCLKS | CS_OWNDC | //Standardstile CS_HREDRAW | CS_VREDRAW, MessageHandler, //Callback-Funktion 0, //Zusätzliche Angaben 0, //nicht benötigt hInstance, //Anwendungsinstanz LoadIcon(NULL, IDI_WINLOGO), //Windows-Logo LoadCursor(NULL, IDC_ARROW), //Normaler Cursor (HBRUSH)GetStockObject(WHITE_BRUSH), //Weisser Pinsel NULL, //kein menü "WindowClass", //Der Name der Klasse LoadIcon(NULL, IDI_WINLOGO) //Windows-Logo }; //Fensterklasse registrieren, damit sie von CreateWindowEx() //verwendet werden kann RegisterClassEx(&wndClass); //Der Rückgabewert von CreateWindowEx() ist auch der Rückgabewert //der Funktion return CreateWindowEx( NULL, // Ohne erweiterte Stile "WindowClass", //Klassenname "HelloWin", //fenstertitel WS_OVERLAPPEDWINDOW | WS_VISIBLE, //fenster-Eigenschaften 100, //oben Links 100, //oben Links 300, //Breite 400, //Hoehe NULL, //Elternfenster NULL, //Menü hInstance, //Anwendungsinstanz NULL); //nicht benötigt }
-
Mindmover schrieb:
LIBCD.lib(crt0.obj) : error LNK2001: Nichtaufgeloestes externes Symbol _main
Du hast statt einer Win32-Anwendung eine Win32-Konsolenanwendung erstellt.
-
MFK schrieb:
Mindmover schrieb:
LIBCD.lib(crt0.obj) : error LNK2001: Nichtaufgeloestes externes Symbol _main
Du hast statt einer Win32-Anwendung eine Win32-Konsolenanwendung erstellt.
Ärm...wie bin ich den da hingekommen? Naja danke ich werd mir das nochmal anschauen hab auch in einem anderen Forum nochmal ein paar Anregungen bekommen ich hoffe das Problem jetzt lösen zu können.
Danke für die Hilfe!