Ich benutze Mingw und versuche Code der Standard-Bibliothek aus meiner Exe-Datei zu entfernen - g ++ -nostdlib -o main.exe main.cpp -luser32. Ja, es funktioniert, aber die erste Funktion wird immer zum Einstiegspunkt. Okay, alles, was ich brauche, ist das direkte Eingabesymbol - g ++ -nostdlib -e WinMain -o main.exe main.cpp -luser32. Jetzt bekomme ich "Warnung: Eingabe-Symbol WinMain nicht gefunden; standardmäßig auf 00401000". Danach wird die erste Funktion wieder zum Einstiegspunkt. Dann versuche ich nostdlib zu nodefaultlibs zu ändern und bekomme eine Menge Fehlermeldungen über "undefinierter Verweis auf 'irgendein Objekt'".Entfernen Sie die Standard-C++ - Bibliothek aus der EXE-Datei
Frage: So, wie kann ich Standardbibliothekscode entfernen und Programmeinstiegspunkt einstellen?
PS g ++ --version - g ++ (i686-posix-zwerg-rev0, Erstellt von MinGW-W64-Projekt) 5.3.0. main.cpp:
#include<windows.h>
//this function called instead of WinMain
int OtherFunction()
{
MessageBoxA(NULL,"OtherFunction","OtherFunction",MB_OK);
return 0;
}
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
MessageBoxA(NULL,"WinMain","WinMain",MB_OK);
return 0;
}
Nur aus Neugier, warum versuchen Sie, die Standard-Bibliothek von ausführbaren zu entfernen? – Borgleader
Ja, etwas ungewöhnlich, um die Std-Bibliothek zu entfernen. Nicht sicher, aber Sie müssen möglicherweise WinMain als extern "C" deklarieren, sonst wenn Sie als C++ kompilieren das Linker-Symbol für Ihre WinMain-Funktion wird dekoriert, ist also nicht "WinMain". Oder Sie sollten den (compilerspezifischen) dekorierten Namen in Ihrem Linker-Befehl verwenden. Wenn Sie nicht wissen, was das alles bedeutet, verwenden Sie eine bekannte Suchmaschine auf der Suche nach _C++ Name Dekoration_. Oder verweisen auf z.B. http://www.geeksforgeeks.org/extern-c-in-c/ aber TBH Ich bin mir nicht sicher, ob das sehr autoritativ ist. Aber es könnte genau sein, nicht sicher. HTH, barny. – barny
barny: Ich versuche schon extern "C" und -e WinMain @ 16. Es funktioniert auch nicht. Borgleader: Für kleinere exe-Dateien. Wenn ich Nostdlib verwende, bekomme ich 3kb EXE-Datei. Wenn ich Nostdlib nicht verwende, bekomme ich 16 kb. Und wenn ich single push_back (1) benutze, bekomme ich 68kb. Ich bin nicht nervig. – Aso