gcc - Windows GNU compiler suite uden eksterne afhængigheder

Indlæg af Hanne Mølgaard Plasc

Problem



Er der nogen gratis, GCC-kompatible suiter til Windows, der genererer selvstændige eksekverbare filer uden eksterne afhængigheder?


Her er et par der ikke passer til regningen, bestilt af uønskelighed, mindst til de fleste:



  • MinGW (MSVCRT.DLL)

  • Cygwin (Cygwin runtime DLL'er)

  • DJGPP (NTVDM.EXE; ikke til stede på x64-platforme)



Lige nu lancerer jeg mig mod (og brug af, om end forsigtigt) MinGW, da det synes at være den 'reneste' tilgang. Jeg er stadig ikke begejstret over MSVCRT.DLL afhængigheden, især som jeg kan og skal håndtere med kunder, der kører før Win2K. (Windows 2000 var den første udgave, der skulle sendes med MSVCRT.DLL). Distribuering af MSVCRT med applikationen er ikke en mulighed. [8] [9] [10]


P.S .: Jeg er klar over, at der er et forsøg på at oprette en MSVCRT-udskiftning til MinGW, men den er stadig ustabil/beta og har begrænset funktionalitet; ikke noget, jeg føler mig behagelig at bruge til produktionsapplikationer.


P.P.S .: Svar på virkningen af ​​'MSCVRT er normalt der alligevel' eller 'Pakker bare redist' er ikke konstruktiv svar. Spørgsmålet spørger specifikt hvordan man undgår afhængigheder, ikke sikre deres tilstedeværelse.

Bedste reference


For at undgå MSVCRT med MinGW skal du bruge følgende flag for linkeren:


-nostdlib -Wl,--exclude-libs,msvcrt.a -Wl,-eWinMain


Bemærk, at du skal erklære en funktion med navnet WinMain (du kan også vælge et andet navn til det), som vil være din main. Du kan heller ikke bruge standardfunktioner som strlen, printf og venner. I stedet skal du bruge WinAPI-ækvivalenterne som lstrcmp, wsprintf osv.


Du kan se et eksempel på dette ved hjælp af SCons på:


http://nsis.svn.sourceforge.net/viewvc/nsis/NSIS/trunk/SCons/Config/gnu?revision=6160u0026amp;view=markup[11]


Jeg har brugt dette til mit projekt, der også kræver Windows 9x-kompatibilitet. Dette har også den dejlige bivirkning ved at have mindre eksekverbare filer. Fra dine kommentarer ovenfor ser det ud til, at du leder efter det også. Hvis det er tilfældet, er der endnu flere tricks, du kan bruge i filen jeg linkede ovenfor.


Microsoft har en tabel, der matcher CRT-funktioner til WinAPI på følgende KB99456:


Win32 ækvivalenter til C Run-Time-funktioner (Webarkiv) [12] [13]


Flere oplysninger om at slippe af med CRT (selvom det er VC, kan det stadig hjælpe) på:


http://www.catch22.net/tuts/minexe[14]