2011-09-04 3 views
6

Y a-t-il des suites gratuites compatibles avec GCC pour Windows qui génèrent des exécutables autonomes sans dépendances externes?Suite de compilateur Windows GNU sans dépendances externes

Voici quelques-unes qui ne correspondent pas au projet de loi, ordonné par inopportunité, moins à la plupart:

  • MinGW (MSVCRT.DLL)
  • Cygwin (Les DLL d'exécution Cygwin)
  • DJGPP (NTVDM .EXE; pas présent sur les plates-formes x64)

En ce moment je penche vers (et en utilisant, quoique provisoirement,) MinGW, car il semble être le "plus propre" approche. Je ne suis toujours pas ravi de la dépendance MSVCRT.DLL, d'autant plus que je peux et dois faire face à des clients exécutant pré-Win2K. (Windows 2000 était la première édition à être livré avec MSVCRT.DLL) La distribution de MSVCRT avec l'application n'est pas une option.

P.S .: Je suis conscient qu'il y a une tentative de créer un remplacement MSVCRT pour MinGW, mais il est encore instable/bêta, et a des fonctionnalités limitées; pas quelque chose que je me sentirais à l'aise d'utiliser pour les applications de production. P.P.S .: Réponses à l'effet de "MSCVRT est généralement là de toute façon," ou "Just package the redist" ne sont pas des réponses constructives. La question demande spécifiquement comment ÉVITER les dépendances, pas assurer leur présence.

+1

Même les outils Microsoft ont cette limite lors de la liaison de l'exécution en tant que DLL par opposition à statiquement. –

+0

Question connexe: http://stackoverflow.com/questions/3943412/can-i-link-msvcrt-static-with-mingw –

+0

Avec mingw, ne pouvez-vous pas lier statiquement avec les bibliothèques statiques de la plate-forme SDK? –

Répondre

9

Pour éviter MSVCRT avec MinGW, utilisez les drapeaux suivants pour l'éditeur de liens:

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

Notez que vous devez déclarer une fonction nommée WinMain (vous pouvez également choisir un autre nom pour elle) qui sera votre main . Vous ne pouvez pas non plus utiliser les fonctions standard telles que strlen, printf et vos amis. Au lieu de cela, vous devez utiliser les équivalents WinAPI comme lstrcmp, wsprintf, etc.

Vous pouvez voir un exemple de cela en utilisant SCons à:

http://nsis.svn.sourceforge.net/viewvc/nsis/NSIS/trunk/SCons/Config/gnu?revision=6160&view=markup

Je l'ai utilisé pour mon projet qui exige également Compatibilité avec Windows 9x Cela a également l'effet secondaire d'avoir des exécutables plus petits. D'après vos commentaires ci-dessus, il semble que vous le cherchiez aussi. Si c'est le cas, il y a encore plus de trucs que vous pouvez utiliser dans le fichier que j'ai lié ci-dessus.

Microsoft a une fonction CRT correspondant de table à WinAPI au KB suivant:

http://support.microsoft.com/default.aspx?scid=kb;EN-US;q99456

Plus d'informations sur se débarrasser du CRT (bien que pour VC, il peut aider encore) à:

MSVCRT est censé être installé dans le cadre de la redistribuable http://www.catch22.net/tuts/minexe

+1

J'aurais aimé voir plus de liens statiques avec libcmt.lib, mais bonne réponse quand même. – Unsigned

+1

Génial, pas encore essayé mais j'ai cherché partout pour cette info, les gens ont même dit que ma question à ce sujet était un dup! http://stackoverflow.com/questions/23218931/build-mingw-console-application-without-crt?lq=1 – paulm

Questions connexes