2016-08-30 7 views
7

Gibt es eine Möglichkeit zum Kompilieren von C/C++ mit Visual Studio 2015 ohne Verwendung einer Laufzeitbibliothek?Visual Studio 2015: Kompilieren von C/C++ ohne eine Laufzeitbibliothek

Ich muss ohne eine Laufzeitbibliothek kompilieren, weil ich meine eigene Laufzeitbibliothek (für mein Betriebssystem) erstelle.

Es gibt Optionen auf C/C++ -> Codegenerierung-> Laufzeitbibliothek
, aber ich möchte eine Option, die "keine" sagt.

Ich bin mir bewusst, viele Funktionen zu verlieren, die in der CRT sind.

+2

Zuletzt hörte ich, es war nicht möglich, einen Betriebssystemkernel mit Visual Studio zu kompilieren - es ist einfach nicht dafür entworfen, und viele Teile davon nehmen an, dass Sie auf Windows laufen. – immibis

+2

Auch verwandt: Visual Studio erzeugt ausführbare Dateien in dem PE-Dateiformat. Welches Dateiformat führt Ihr Betriebssystem aus? –

+2

Außerdem: starten Sie hier: http://wiki.osdev.org/Visual_Studio und gehen Sie direkt zu "Custom C++ Runtime" –

Antwort

7

Um Ihre Anwendung ohne C-Laufzeitbibliothek (CRT) verwendet /MT, /NODEFAULTLIB Linker-Optionen zu kompilieren und Einstiegspunkt bei Linker -> Advanced -> Entry Point neu definiert in Ihrem Code definiert funktionieren zu können, beispielsweise rawMain. Die Signatur ist:

DWORD CALLBACK rawMain(); 

Ohne C-Runtime-Bibliothek Sie sind nicht erlaubt, es zu benutzen Funktionen ist, wie malloc, free, memset etc. Sie sollten sich alle verwendeten CRT-Funktionen implementieren. Z.B. Sie können die Verwendung von malloc durch VirtualAlloc() und free durch VirtualFree() ersetzen.

Um zu überprüfen, dass die C-Laufzeit nicht mit Ihrer Anwendung verknüpft ist, verwenden Sie Dependency Walker.

+0

Hinweis für weitere Untersuchung, CRT-Implementierung der Hauptfunktion befindet sich in 'VC \ crt \ src \ vcruntime \ exe_common.inl' (VS2015) – Nikita

+0

@SeeSoftware Stellen Sie sicher,' Linker -> Eingabe -> Ignoriere alle Standardbibliotheken 'festgelegt ist Klicken Sie auf "Ja" und überprüfen Sie, ob die Liste "Linker -> Eingabe -> Zusätzliche Abhängigkeiten" keine CRT-Bibliotheken enthält. Stellen Sie außerdem sicher, dass Sie keine "C++ - Standardbibliothek-Headerdateien" (https://msdn.microsoft.com/en-us/library/a7tkse1h.aspx) einschließen, da in diesem Fall die Standard-C++ - Bibliothek verknüpft ist automatisch. – Nikita

+0

Ich hatte die richtigen Einstellungen, aber vergessen, debug zu ändern – SeeSoftware

Verwandte Themen