[VC++ 2005] Float -> Int ohne C-Runtime
-
Hallo,
ich kompiliere meine Programme ganz gern ohne C-Runtime, allerdings stehe ich jetzt vor einem kleinen Problem: Immer, wenn ich einen float nach int konvertieren will, meldet der Linker einen unaufgelösten externen Verweis auf __ftol2_sse. Kann man das irgendwie umgehen?Ein großes Dankeschön im Voraus!
-
Mach es selber in Assembler.
-
Fließkomma schrieb:
ich kompiliere meine Programme ganz gern ohne C-Runtime
was hat das denn für vorteile?
-
was hat das denn für vorteile?
Die Programme sind deutlich kleiner und ich brauche nicht immer die Runtimes mitliefern.
Mach es selber in Assembler.
Danke für den Tipp. Da ich nicht so der Assembler-Profi bin, hab ich mich mal ein wenig schlau gemacht und bin letztendlich bei diesem Code hier gelandet:
int FloatToInt( float f ) { int i; _asm { fld f fistp i } return i; }
Ist das so die gängige Methode?
-
Fließkomma schrieb:
Ist das so die gängige Methode?
Nein. Dieser Code rundet das Argument in Richtung des nächsten Integers - eine direkte Konvertierung von float nach int schneidet dagegen die Nachkommastellen ab. Das kann man selbstverständlich auch mit Assembler erreichen, ist aber etwas umständlicher, es sei denn SSE-Instruktionen sind im Spiel, wie die Fehlermeldung nahelegt.
Fließkomma schrieb:
was hat das denn für vorteile?
Die Programme sind deutlich kleiner und ich brauche nicht immer die Runtimes mitliefern.
In bestimmten Fällen wird das sicher stimmen, aber als allgemeine Regel dürfte es unbrauchbar sein. Zudem gibt es so etwas wie statisches Linken. Wenn das Programm irgendetwas Nichttriviales tun soll, wirst du ohne die Standardbibliothek kaum glücklich werden.
-
^^es gibt da so'nen trick mit ner magic number und einem shift. allerdings ist dafür noch eine float-addition erforderlich
-
Fließkomma schrieb:
ich brauche nicht immer die Runtimes mitliefern.
Ween Du statisch linkst brauchst Du das auch nicht...
http://blog.kalmbach-software.de/de/2008/03/05/wie-man-statisch-gegen-die-c-runtime-crt-linkt/
-
Und bzgl. kleiner Programme: siehe:
http://blog.kalmbach-software.de/2008/02/02/smallest-application-size-for-win32-console-application/
-
Danke für die Antworten.
camper,
dass die oben beschriebene Methode "richtig" rundet, ist in meinem Fall sogar sehr praktisch, dann werde ich das so benutzen.Jochen Kalmbach,
dank deinem Blog wusste ich erst, wie man ohne CRT kompilieren kann und bisher bin ich immer ganz gut damit klar gekommen.