Ai-je vraiment besoin de libgcc?
J'ai été en utilisant GCC 4.6.2 sur Mac OS X 10.6. J'ai utiliser l'option-static-libgcc option quand je compile, sinon mon binaires recherchez libgcc sur le système et je ne suis pas sûr de quelque chose sur GCC 4.2 est pris en charge sur mac OS X. Cela fonctionne très bien, mais pourquoi ai-je encore besoin de libgcc? J'ai lu sur elle et de la GNU docs dire qu'il contient des "opérations arithmétiques que le processeur cible ne peut pas effectuer directement." Comment puis-je savoir ce que ces opérations sont? Et pourquoi sont-ils tellement complexe que j'ai besoin d'inclure cette librairie? Pourquoi ne peut-GCC juste optimiser le code directement au lieu d'avoir recours à ces fonctions de la bibliothèque? Je suis un peu confus. Tout un aperçu de ce serait apprécié!
OriginalL'auteur Synthetix | 2012-02-23
Vous devez vous connecter pour publier un commentaire.
Oui, vous avez besoin d'elle .... probablement. Si vous n'en avez pas besoin, puis la liaison statique, il est inoffensif. Vous pouvez dire si vous en avez besoin à l'aide de la
-t
lien option trace (je pense).Il y a des choses que tu ne peux pas le faire en une seule instruction (généralement des choses comme les opérations en 64 bits sur les architectures 32 bits). Ces choses peuvent être faites, mais si ils utilisent un nombre non négligeable de directives, il est plus efficace de les avoir tous en un seul endroit.
Lorsque vous désactivez l'optimisation à l'aide
-O0
(qui est en fait la valeur par défaut de toute façon) puis GCC est à peu près toujours utilise le libgcc routines.Lorsque vous activez vitesse optimisation de la CCG peut choisir d'insérer la séquence d'instruction directement dans le code (si il sait comment). Vous pouvez trouver qu'il finit à l'aide d'aucun des libgcc versions - il sera certainement moins de libgcc appels.
Lorsque vous activez taille optimisations CCG peut préférer l'appel de la fonction, ou non, cela dépend de ce que les développeurs de GCC pense que c'est la meilleure vitesse/taille de trade-off dans chaque cas. Notez que même quand vous dites cela pour optimiser la vitesse, le compilateur peut juger que certains fonctions sont peu susceptibles d'être utilisés, et d'optimiser ceux de taille, d'autant plus si vous utilisez PGO.
Fondamentalement, vous pouvez penser de la même manière que
memcpy
ou les mathématiques, les fonctions de la bibliothèque: le compilateur fonctions inline il juge bénéfique, et d'appeler des fonctions de la bibliothèque autrement. Le compilateur peut "inline" fonctions standard et libgcc fonction sans regarder la définition de bibliothèque, bien sûr, qu'il "sait" ce qu'ils font.De savoir si l'utilisation statique ou dynamique libgcc est un intéressant compromis. D'une part, une dynamique (partagé) de la bibliothèque va utiliser moins de mémoire dans l'ensemble de votre système, et est plus susceptible d'être mis en cache, etc. D'autre part, une statique libgcc a un faible surcoût d'appels.
La chose la plus importante est bien la compatibilité. Évidemment, le libgcc de la bibliothèque doit être présent pour que votre programme puisse s'exécuter, mais il doit également être compatible version. Vous êtes ok sur une distro Linux stable, la version de GCC, mais sinon la liaison statique est plus sûr.
J'espère que cela répond à vos questions.
Merci, il y a aucune question pourrait être trouvé sur Internet à propos de ne pas y compris libgcc, libgcc_s dans l'exécutable?
OriginalL'auteur