error LNK2019: Nicht aufgelöstes externes Symbol '_main', verwiesen in Funktion '_mainCRTStartup'



  • also es sieht so aus...

    Es soll schon eine exe erstellt werden und wenn ich es recht überblicke, habe ich eine Windows-Anwendung erstellt.
    Zumindest habe ich beim Anlegen des Projektes "MFC-Andwendung" angegeben, das sollte also keine Konsolen-Anwendung sein (es sei denn, ich vertue ich mich hier...)

    Was ich aber vergessen habe, zu erwähnen ist, daß auch noch Bibliotheken (lib) eingebunden werden, die wahrscheinlich mit einer anderen Laufzeitbibliothek erstellt worden sind...



  • Hast du in deinem Projekt eine WinMain-Funktion? Weil die scheint er nicht zu finden. Die brauchst du aber, wenn du eine Win-Exe willst.
    Hast du ein leeres Projekt erstellt oder schon mit Vorgaben vom Assistenten irgendwas?



  • Ich habe folgendes gemacht:

    Neues Projekt -> Visual C++ Projekte -> MFC Anwendung

    dann

    Anwendungstyp -> Auf Dialogfeldern basierend
    Projektstil -> MFC Standard
    Verwendung von MFC -> MFC in einer gemeinsam genutzten DLL verwenden

    Alles andere habe ich gelassen, wie es ist.

    Quasi genau so, wie es in Visual C++.Net in 21 Tagen beschrieben ist 🙂

    Sollte ich andere Einstellungen verwenden, um eine WinMain zu erhalten?
    Die WinMain habe ich nämlich tatsächlich nicht...



  • Ne das stimmt dann schon.

    Schaut für mich eher so aus als ob die Library die du einbindest eine Exportlibrary ist.
    Wenn das der fall sein sollte, brauchst du auch noch eine zugehörige Dll die dann die Main enthält.

    Zwei mögliche Fehler die deine Fehlermeldung auslösen:

    1.) Die in der Library exportierte Funktion Main kann nicht gefunden werden, weil dir die Dll fehlt.

    2.) Die Funktion Main existiert in der Dll, die dll wird auch geladen, aber die Funktion Main wurde nicht mit declspec(dllexport) exportiert.

    Sind aber nur Vermutungen. Normalerweise bekomm ich so eine Fehlermeldung immer wenn irgendwas mit einem export aus der dll nicht stimmt.

    codeman



  • Gibt es denn überhaupt eine wie auch immer geartete MFC-Anwendung, die eine WinMain beinhaltet?

    Nach mächtig langem googlen habe ich schon ne Menge wiedersprüchliche Sachen gelesen...
    Einige sagen, es gäbe überhaupt gar keine WinMain.
    Dann heißt es, vier andere Funktionen (InitInstance, usw.) würden die Funktion der WinMain übernehmen.
    Wahlweise wird auch gesagt, es gäbe eine WinMain, die sei aber nur sehr gut und sehr tief versteckt.



  • Ändere mal deine Laufzeitbibliothek einstellung unter:

    Project propertys -> C/C++ -> Codeerstellung -> Laufzeit Bibliotek

    auf Multithreaded-Debug-DLL (/MDd) und link mal neu. Vielleicht passt doch die Laufzeitbibiotek nicht.



  • Schade, der Tip hat leider nicht funktioniert...

    Habe aber auch mal alle anderen Optionen ausprobiert und vom Linker nur die Antworten "Please use /MD Switch" erhalten.

    Scheint nicht ganz einfach zu lösen sein - also ne nette Herausforderung fürs Forum 🙂





  • könnte, tut aber nicht 😞

    In dem Artikel wurde als Lösungsvorschlag

    "Gelöst: Laufzeitbibliothek (C/C++ - Codeerstellung) stand auf Multithreaded-Debug (/MTd). Auf Multithreaded-Debug-DLL (/MDd) geändert. Nun lässt es sich fehlerfrei linken und compilieren. Ebenso, wenn ich "Singlethreaded (/ML)" umstelle."

    präsentiert.
    Das habe ich aber vorher schon mal ausprobiert...
    Mit wenig bis gar keinem Erfolg...



  • Es gibt Neuigkeiten, habe eine Readme und ein VS Projekt gefunden...

    Da steht geschrieben:
    -----------------------------------------------------------
    Windows
    -------

    Die statische Bibliothek wurde mit Visual Studio .NET 2003 getestet und ein Projekt hierfür erzeugt.
    Da Visual Studio das Exportieren eines Makefiles nicht mehr unterstützt, wurde auf ein Makefile verzichtet.

    Zum Übersetzten öffnet man das Projekt 'libseq.vcproj' in Visual Studio und wählt die gewünschte
    Konfiguration. Es sind vier Konfigurationen vorhanden:

    1. Debug
      Single-Threaded Debug -> libseqd.lib
    2. Debug_mt
      Multi-Threaded Debug -> libseqmtd.lib
    3. Release
      Single-Threaded Release -> libseq.lib
    4. Release_mt
      Multi-Threaded Release -> libseqmt.lib

    Zum Erstellen der Bibliotheken jeweils die gewünschte Konfiguration auswählen und erstellen lassen
    (Erstellen -> Projektmappe erstellen). Die Bibliothek wird im Unterverzeichnis 'WIN32' gespeichert.
    Vor dort aus kann man sie in das gewünschte Verzeichnis für Bibliotheken kopieren.

    Die notwendigen Header-Dateien liegen alle im Projektverzeichnis und müssen nur ins
    vorgesehene Verzeichnis kopiert werden.
    -----------------------------------------------------------

    Habe daher auch schon alle vier Versionen der Bibliothek neu erstellt - mit demselben Ergebnis...

    So langsam breche ich in meine Tastatur 😞



  • also ich verstehe das nicht...

    Ich habe gerade mal spasseshalber alle Header und Quelldateien, die nötig sind, um die Bibliothek zu erstellen, von Hand zu meinem Projekt hinzugefügt - und siehe da, es funzt!

    Jetzt frage ich mich, warum?

    Wenn ich die Bibliothek selbst kompiliere und in mein Projekt hinzufüge, dann klappt es nicht - wenn ich nur die .h und .cpp hinzufüge, klappt es ohne Probleme.

    Warum?



  • Post mal deine Declatation der Main Funktion, bitte. 😞

    Sonst kommen wir hier nicht weiter. Ohne code kann keiner sagen was nicht stimmt.
    Es reicht dir nicht die *.lib in dein Projekteinstellungen als Abhängigkeit an zu geben, du musst natürlich auch den Header der *.lib in dein Projekt includieren.



  • Die Deklaration der main kann ich leider nicht bieten, da meine MFC Anwendung keine main hat - das ist ja mein Problem.

    Die Header der lib habe ich vorher schon eingebunden - daran kann es also auch nicht liegen.

    Ich bin aber mittlerweile an einem Punkt angekommen, an dem ich das jetzt einfach so lasse - das Einbinden aller Header und Quelldateien ist zwar nicht sehr elegant, funktioniert aber gut.

    Ich danke Dir für Deine Mühe und Hilfe!



  • Gemeint ist ja auch nicht die Main in deiner Applikation 🙄, sondern in deiner Library, da liegt ja das Problem.

    Na ja ist auch eine Lösung mit dem einbinden der Files in die Applikation. Zwar nicht elegant, aber zweckmäßig.

    codeman


Anmelden zum Antworten