9
votes

Puis-je relier MSVCRT statiquement avec Mingw?

J'ai C Programme I Compilez avec Mingw sous Windows. Cela fonctionne bien mais nécessite msvcrt.dll . Je veux lier cela statiquement (comme je peux faire dans Visual Studio). Est-ce possible?

J'ai essayé -Static drapeau sur gcc et il n'a pas modifié.

Qu'en est-il du programme C ++ utilisant également la bibliothèque C ++ standard?


5 commentaires

À propos de votre dernière question ... Si vous parlez de STL, c'est seulement en tête d'en-tête.


@Armen: Mais il n'y a-t-il pas non plus de DLL pour C ++ MSVCRT ou quelque chose comme ça?


Notez que msvcrt.dll est incluse en tant que composant système dans presque toutes les versions de Windows que vous êtes généralement susceptibles de rencontrer. En particulier, vous n'avez pas besoin de le distribuer avec votre application car vos utilisateurs finaux l'auront déjà. Une question naturelle est alors pourquoi avez-vous besoin d'éviter une liaison dynamique?


N'oubliez pas non plus que vous pouvez confirmer les DLL en cours d'utilisation avec Walker de dépendance .


Le dernier Mingw, utilisant GCC 4.5, dispose de dépendances de bibliothèque supplémentaires, y compris libgcc_s_dw2-1.dll et LibstDC ++ - 6.DLL. Je n'ai pas été en mesure de les supprimer, et donc je les distribue avec ma demande.


3 Réponses :


10
votes

Je crois que Mingw n'utilise pas la bibliothèque d'exécution statique pour des raisons de copyright.

Vous pouvez peut-être essayer d'utiliser NewLib ( http://sourceware.org/newlib/ ) pour créer Un exécutable qui ne correspond pas à msvcrt.dll


3 commentaires

+1 pour éviter le droit d'auteur. C'est un effet secondaire intelligent de celui-ci étant déjà sur chaque système Windows. Les programmes construits avec Mingw l'exigent, mais ne doivent jamais la distribuer. Par conséquent, pas de problèmes de copyright.


Même si je n'utilise aucune fonction STD C dans le code, cela nécessite MSVCRT, je pense que les codes de démarrage / nettoyage CRT fonctionnent avant / après. NewLib fournit cela aussi?


Qu'en est-il de Mingw64?



0
votes

Cela ne répond pas à la question de " Comment éviter de relier avec msvcrt.dll ", mais si vous êtes ici pour une question plus générale de " comment créer un lien avec Mingw Statiquement "...:

lien avec gcc -static -static-libgccc -static-libstdc ++ et vous n'aurez pas besoin libgcc_s_dw2-1.dll et libstDC ++ - 6.DLL


3 commentaires

Downvoting Une réponse comme celle-ci sans explication n'est pas vraiment utile. Il n'y a pas de raison évidente pour laquelle cette réponse est défectueuse.


Qu'en est-il de la cause ceci n'a aucun effet de suppression de MSVCRT.DLL à partir des dépendances des fichiers binaires générés?


parce qu'il aura toujours besoin de msvcrt.dll



1
votes

Après avoir passé un moment à la recherche de cela moi-même, j'ai rencontré Cet article introduisant la bibliothèque d'exécution d'alternative en progrès MINGW32 . Cependant, il n'est pas prêt à être utilisé et le développeur semble l'avoir abandonné. lien page d'accueil ici .

Publication de cette réponse ici dans l'espoir que cela viendra être utile aux gens de googler à un moment donné à l'avenir.


0 commentaires