You are currently viewing Résoudre Le Problème De Choix D’exécution De Liaison Statique C

Résoudre Le Problème De Choix D’exécution De Liaison Statique C

 

Mise à jour

  • 1. Télécharger ASR Pro
  • 2. Exécutez le programme
  • 3. Cliquez sur "Analyser maintenant" pour rechercher et supprimer tout virus sur votre ordinateur
  • Accélérez votre ordinateur aujourd'hui avec ce simple téléchargement.

    Dans certains cas, votre système peut générer une erreur indiquant que la bibliothèque c de l’enseignement est liée de manière statique. Il peut y avoir les raisons majoritaires de cette erreur.

     

     

    Étant donné que personne ne choisit encore de trouver une réponse, je vais essayer cette méthode. Malheureusement, je ne connais pas le code IDE :: Blocks, donc ma réponse sera partielle.

    1 Comment créer un exécutable GCC lié statiquement

    Mise à jour

    Vous en avez assez que votre ordinateur soit lent ? Agacé par des messages d'erreur frustrants ? ASR Pro est la solution pour vous ! Notre outil recommandé diagnostiquera et réparera rapidement les problèmes de Windows tout en augmentant considérablement les performances du système. Alors n'attendez plus, téléchargez ASR Pro dès aujourd'hui !


    Cela ne sera pas spécifique à l’IDE, mais à GCC (et à de nombreux compilateurs supplémentaires) en général. Supposons que vous ayez un “Hello program world” simplifié dans main.cpp (aucune idée de dépendances en dehors de la bibliothèque standard et en plus donc de la bibliothèque d’exécution). Vous le compileriez à nouveau, mais le liez statiquement via :

    1. statically link up c runtime library

      Compilez main.cpp directement dans main.o (nom du fichier de résultat implicitement) :

        $ g ++ -ke -Main Wall.  -c  cpp 

      Cela indique à GCC de s’arrêter après la phase de compilation (exécutez sans aucun doute cet éditeur de liens). -Wall déclenche principalement des messages de diagnostic. Si les programmeurs novices l’utilisaient beaucoup plus souvent et y prêtaient une attention particulière, il y aurait actuellement beaucoup de questions sur le site internet d’idées. 😉

    2. statically link c runtime library

      Link main.o (peut contenir plus d’un fichier) glissez-déposez statiquement dans le runtime classique et par conséquent la bibliothèque et collez l’exe en critique  :

        $ g ++ -u critic main.o -static 

      Sans utiliser votre contrôle -o main actuel, GCC aurait conservé le dernier exe dans le document mal nommé a.out (qui était autrefois utilisé pour recevoir " sortie de l'assemblage" œ ).

    Surtout lorsque vous utilisez uniquement I-begin, nous vous recommandons fortement de faire les choses particulières "à la main" car cela peut vous aider à mieux comprendre la boîte à outils de construction.

    En vérité, nos deux commandes ci-dessus pourraient être combinées en une seule :

      $ g ++ -Wall -u current Main.-static 

    Chaque IDE cpp sain peut être capable de spécifier de tels drapeaux d'éditeur de liens du compilateur.

    2 avantages et inconvénients d'un lien statique

    • Vous prenez un bon fichier qui peut être imité sur n'importe quel équipement avec des frameworks et des systèmes d'exploitation compatibles, et la technologie de l'information fonctionne très bien quelle que soit la version d'une bibliothèque de texte installée. Mai

    • Vous exécutez une procédure dans une condition où la bibliothèque partagée locale n'est pas de nos jours. Par exemple, placer un exécutable C lié de manière statique directement dans chroot () peut aider la prison à réduire la surface d'une attaque de stress et d'anxiété ou de peur sur le serveur Web.

    • Étant donné que les raccourcis activés ne sont pas requis, le démarrage du programme peut être plus rapide. (Je suis sûr qu'il y a des événements où le contraire est vrai, expressément lorsqu'une bibliothèque partagée est déjà chargée sur un autre processus.)

    • Étant donné que chaque éditeur de liens peut coder en dur les adresses de rôle, les appels de fonction seront plus rapides.

    • Un stock (par exemple LAPACK) peut être lié à des composants avec plus d'une version liée. La liaison statique garantit qu'une version spécifique est toujours utilisée sans que cela doive définir LD_LIBRARY_PATH <. besoin de problème sur / code> correctement. Bien sûr, cela a en plus un inconvénient : vous ne pouvez presque jamais envisager une bibliothèque sans recompiler. Si vous voulez avoir la même version tout le temps, pourquoi les clients installeraient-ils plus d'une version ?

    • Comme vous l'avez mentionné plus tôt, n'importe lequel de nos exécutables peut croître de manière significative. Bien sûr, gardez à l'esprit que cela dépend beaucoup de la bibliothèque à laquelle le client se connecte.

    • Un bon fonctionnement opérationnel peut être suffisamment intelligent pour charger ce texte de section particulier à partir d'une bibliothèque partagée directement dans la mémoire une seule fois si plusieurs approches nécessitent toute la bibliothèque en même temps. En établissant un lien statique particulier, vous perdez cet avantage et ce système peut fonctionner plus rapidement en mémoire.

    • Votre programme bénéficie de la mise à jour de la bibliothèque locale sans délais supplémentaires. Cependant, pour simplement remplacer votre bibliothèque partagée actuelle par une marque plus récente et complète (espérons-le compatible ABI), l'administrateur du programme doit recompiler et inclure chaque programme qui l'utilise. Dans mes pensées, c'est l'inconvénient le plus grave.

      Par exemple, considérons la bibliothèque OpenSSL. Lorsque le bogue Heartbleed a été découvert et corrigé plus tôt cette année, les administrateurs système peuvent installer la version corrigée d'OpenSSL ainsi que redémarrer tous les services pour réactiver la vulnérabilité dans la journée suivant la publication de la période. C'est-à-dire si leurs services étaient liés dynamiquement à OpenSSL. Pour ceux, qui liaient statiquement, ce qui aurait pris des semaines si ce dernier avait fini par ne pas être naturel et figé le début dans la façon dont le présent.

    • Vos utilisateurs ne se contentent pas de remplacer la bibliothèque partagée à la volée. Par exemple, les utilisateurs du script de film torsocks (et de la bibliothèque liée) peuvent (par position LD_PRELOAD ) changer les racks du système réseau en un rack qui dirige entièrement leur trafic via le réseau Tor. ... Et cela fonctionne vraiment pour les programmes dont les développeurs n'ont jamais eu connaissance de ce type de possibilité. (Qu'il s'agisse d'une bonne idée et de confiance est maintenant une question de débat de tiers.) Un autre cas d'utilisation courant est le débogage d'applications, quel type de doit être "renforcé" en remplaçant malloc et comme ob par versions spécialisées.

    À mon avis, les problèmes de liens statiques dépassent les avantages, sauf dans des cas très particuliers. En règle générale, il doit être dynamique et statique lorsque le client en a généralement besoin.

    Candidature

    Comme Alf l'a souligné (voir les commentaires), il existe toutes les options spéciales de GCC pour l'intégration sélective de centaines de toutes les bibliothèques standard C++, mais certainement pas seulement pour lier statiquement l'ensemble du programme. Extrait du manuel du propriétaire :

    gcc

    -static-libstdc ++

    Lorsque notre programme signifiant ++ est utilisé pour convertir un programme C ++ en pages Web, il lie généralement spécifiquement les pages Web à libstdc ++. Si libstdc ++ peut être trouvé en tant que bibliothèque commune et partagée, le choix -static n'est pas utilisé, alors cette page Web se présente avec la version générale de libstdc ++. C'est vraiment bon en général. Cependant, il est parfois utile de pouvoir geler les différentes libstdc++ utilisées par tous les programmes, même sans passer par un lien complètement défini. L'option -static-libstdc ++ permet au pilote g ++ de créer un lien Web statique vers libstdc ++, tandis que les autres bibliothèques ne doivent pas toujours être liées statiquement.

     

     

    Accélérez votre ordinateur aujourd'hui avec ce simple téléchargement.

     

     

     

    Statically Link C Runtime Library
    Statycznie Link C Runtime Library
    Collega Staticamente La Libreria Di Runtime C
    C-Laufzeitbibliothek Statisch Verknüpfen
    Statiskt Länka C Runtime Library
    Статическая ссылка на библиотеку времени выполнения C
    Vincular Estaticamente à Biblioteca De Tempo De Execução C
    정적으로 링크 C 런타임 라이브러리
    C Runtime-bibliotheek Statisch Koppelen
    Vincular Estáticamente La Biblioteca En Tiempo De Ejecución De C