Visual Studio 2010 MSVCR la dépendance de retrait?
J'ai essayé Googleing cela, mais je ne pouvais pas trouver une solution. Je suis en train d'apprendre quelques notions de C++. J'ai écrit un simple bonjour tout le monde:
#include <stdio.h>
int main()
{
printf("hello, world\n");
return 0;
}
Il compilé parfaitement et tout! Grand que je pensais, donc j'ai chargé ma machine virtuelle avec XP et pas de service packs installés, puis essayé de l'exécuter. Il m'a dit que j'avais besoin de MSVCR dll. Est il possible que je peux enlever complètement de cette dépendance? Je ne veux pas des trucs du programme avec la dll. Je veux qu'il soit disparu, complètement. Est-il possible de faire et d'exécuter un programme qui sera exécuté dans XP et jusqu'? Merci.
OriginalL'auteur dorey | 2012-01-29
Vous devez vous connecter pour publier un commentaire.
Il est techniquement possible pour supprimer cette dépendance en C, mais je ne suis pas sûr qu'il est même possible en C++. Et dans les deux cas, je ne le recommanderais pas. Vous perdez beaucoup de choses que la CRT fait pour vous, en coulisses, dont la plupart vous ne voulez pas avoir à réinventer vous-même à un niveau inférieur de la mode. Pour commencer, c'est la bibliothèque d'exécution qui fait des appels de votre
main
de la fonction ainsi que d'appeler les constructeurs et les destructeurs globale et statique des objets en C++.La meilleure et la solution la plus simple est probablement de changer la façon dont votre application liens vers les bibliothèques. Vous disposez de deux options différentes: dynamique et statique. La liaison dynamique est plus efficace de la mémoire et de signifie que votre application va tirer parti de toutes les corrections de bugs qui sont faites à la bibliothèque. Il s'appuie sur le runtime DLL être présent pour que votre application à lancer. La liaison statique effectivement intègre la bibliothèque d'exécution de code dans votre application au cours de la phase de liaison de la construction. Cela signifie que vous pouvez exécuter sans distribution de la DLL, mais il y a des mises en garde.
Pour des applications simples, il est peu probable que ces mises en garde sont pertinentes. Changer le style de lien en usage dans les options de votre projet:
Dans la "Bibliothèque d'Exécution de la propriété" zone de liste déroulante, choisissez l'une des "Multi-thread".
Les versions de débogage doit utiliser "Multi-thread "Debug", tandis que les versions Release devrait utiliser "Multi-thread".
Ne remarque que depuis que vous êtes à l'aide de visual studio 2010, vous pouvez toujours choisir de lier dynamiquement à l'exécution et profiter de tous les avantages de le faire sans avoir à exécuter le CRT installer sur les ordinateurs cibles. Tous vous avez besoin est le redistribuable DLL(s) placé dans le même dossier que l'exécutable de votre application. Cela rend le déploiement (et même l'essai) très simple et direct. Vous trouverez ces bibliothèques dans le cadre de votre installation de Visual Studio:
Et bien sûr, les versions de débogage de la bibliothèque CRT sont jamais redistribuable. Puisque vous ne devez pas distribuer les versions de débogage de votre application, ce n'est pas un problème. Assurez-vous que vous avez compilé une "Libération" de construire (en utilisant le menu déroulant de la zone de liste déroulante dans la barre d'outils), pour lesquels vous aurez besoin seulement le redistribuable les bibliothèques dans le répertoire ci-dessus.
Il n'y a pas de C runtime pour vous à utiliser qui vient avec n'importe quelle version de Windows. Windows lui-même, en effet, dépend d'une bibliothèque d'exécution C, mais elle déploie un privé version de la bibliothèque pour son propre usage. Les Applications ne sont pas destinées à lier ou de l'utiliser de toute façon. Vous êtes sur votre propre pour le déploiement de toutes les dépendances nécessaires, et comme vous l'avez remarqué, vous ne pouvez pas supposer que les ordinateurs cibles ont déjà la bonne version(s) installé.
Éviter de mentionner le CLR, il n'est pas pertinent ici. Et de faire remarquer que le déploiement de la suggestion ne peut fonctionner que pour VS2010, les versions précédentes de Windows side-by-side de cache.
Oups! C'était une faute de frappe, je voulais dire le CRT. Et merci pour cette remarque à propos de VS 2010.
OriginalL'auteur Cody Gray
Vous pouvez lier le MS d'exécution de manière statique, les Options de Projet -> C/C++ -> Génération de Code -> Multithread (ou de Débogage Multithread pour le débogage de configuration). Aucune DLL ne devrait être nécessaire ensuite.
main()
fonction.Gris: compilé à la taille de l'exécutable et pas de dépendances.
int main(){return 0;}
produira 16kB exécutable qui peut être comprimé en 2..6kB, et la seule dépendance est msvcrt.dll, qui est une composante du système. Vous pouvez vous débarrasser de même que la dépendance et de faire votre propre stripped-down crt (en s'appuyant sur le fonctionnement du système comme GlobalAlloc ou VirtualAlloc et à l'aide de _tmaincrtstartup) qui sera encore plus petit, mais dans ce cas il va avoir beaucoup plus compilcated. Bien sûr, tous ces trucs ne sont utiles que si vous avez de très uniques exigences de votre application (demoscene concours avec de limite de taille, peut-être?).msvcrt.dll est le MSVC6 d'exécution et est livré avec Windows à partir de Win2k. Il est parfaitement bien de les utiliser. Dire que vous ne devriez pas le lien de Dll fournie par le système est impair. Proposez-vous que nous cessions de nous relier à user32.dll et al?
Ce n'est pas la MSVC6 de l'exécution, il a juste le même nom. Microsoft a effectivement été mise à jour de la bibliothèque d'exécution pour les composants du système Windows, en ajoutant quelques nouveautés qui sont par ailleurs déployés dans le cadre du versionnées noms. Je ne me souviens pas où je l'ai lu, mais je l'ai sur relativement crédibles autorité que cette bibliothèque est destinée à être privé pour Windows usage interne, et ne sont pas disponibles pour une utilisation par les applications. La théorie est appuyé par le fait que l' .fichiers lib ne sont pas rendus publics. En reliant le privé CRT est différente de user32.dll.
Le meilleur lien que je peux trouver à l'appui de ma demande de règlement est ici: C des Bibliothèques d'Exécution, qui dit: "La msvcrt.dll est maintenant un "DLL connue," ce qui signifie qu'il est un composant du système appartenant et construits par Windows. Il est prévu pour une utilisation future que par des composants de niveau système." Tout cela vient de la problèmes rencontrés avec le partage d'un écran CATHODIQUE dans les applications et le système d'exploitation. Vous lien vers cette DLL, mais il n'est pas pris en charge et n'est pas recommandé. Le système CRT n'est pas testé ou documentés pour un usage général; mises à jour de sécurité peuvent rendre votre application tomber sur son visage.
OriginalL'auteur Karel Petranek
vous pouvez supprimer l'ennuyeux bibliothèque run-time, ce faire:
project properties > linker > input > ignore all default libraries> yes
cela vous donnera calme, quelques questions vous avez besoin pour gérer, par exemple, flottant
les nombres de point ne fonctionne pas, la pile de la mémoire est très faible (environ 3k), il n'y a pas de fichier d'aide intégré contre les dépassements de tampon et un tel, et vous ne pouvez pas utiliser la bibliothèque standard sans le copier-coller dans votre projet.
cela permettra également de diminuer la taille de la
.exe
à peu près équivalent à comme si elle était faite à la maindans l'assemblée.
OriginalL'auteur FloatingVoid