IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Différence bibliothèques statiques/dynamiques


Sujet :

C

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 277
    Points : 141
    Points
    141
    Par défaut Différence bibliothèques statiques/dynamiques
    Bonsoir,

    Je viens de lire des doc sur les bibliothèques en C, mais je ne suis pas sûr d'avoir bien compris.

    Effectivement, je travaille sur un projet avec un OS temps réel maison, avec chaque tâche compilée séparément.
    Chaque tâche fait appel à une même bibliothèque statique, et chaque tâche est compilée avec sa bibliothèque.
    Ce qui fait que pour mes 10 tâches, à chaque fois j'embarque 10 fois la bibliothèque.

    Je me demandais, si il serait possible pour libérer de la place RAM/ROM, de faire une bibliothèque/library dynamique ?
    Si je résume bien je devrais avoir le mapping ROM suivant, (je ne traite pas le mapping RAM qui serait dans le même genre).
    ROM:
    0x0000-0x0FFF tâche 1
    0x1000-0x1FFF tâche 2
    ...
    0x9000-0x9FFF tâche 10
    0xA000-0xAFFF bibliothèque

    Est-ce correct ?

    Merci pour votre aide,

    Bat

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 629
    Points : 10 554
    Points
    10 554
    Par défaut
    Il y a même 3

    Statique: .lib ou .a. En gros c'est du binaire qui va être injecté dans ton exécutable lors du linkage

    Dynamique: .dll ou .so. C'est un fichier externe qui sera mappé en mémoire en partie (juste le code qui est nécessaire). Donc c'est chiant parce qu'il y a un processus d'ouverture (LoadLibrary) et de fermeture

    Tu as un mode entre les deux (sous Linux je ne sais pas ): tu vas avoir une bibliothèque statique .lib dont les fonctions/ procédures/ méthodes vont pointer vers une DLL. Donc le processus ouverture/ fermeture est automatique avec les avantages de la DLL (exécutable plus petit et chargement seulement du code nécessaire)
    Mais tu auras toujours à trimballer et à gérer la/ les DLL(s)


    Édit: Merci Obsidian , mais je confonds toujours
    D'ailleurs lorsque je codais pour iPhone, on devait compiler en plusieurs versions les bibliothèques (en changeant la plateforme: x86, ARMV6, ARMV7 et ARMV7s) et utiliser les outils comme ar pour faire une grosse bibliothèque à mettre dans son projet

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 622
    Points
    23 622
    Par défaut
    Citation Envoyé par foetus Voir le message
    Il y a même 3

    Statique: .lib ou .so. En gros c'est du binaire qui va être injecté dans ton exécutable lors du linkage

    Dynmaique: .dll ou .a. C'est un fichier externe qui sera mappé en mémoire en partie (juste le code qui est nécessaire). Donc c'est chiant parce qu'il y a un processus d'ouverture (LoadLibrary) et de fermeture
    C'est l'inverse : sous UNIX, ce sont les « *.so » qui sont les bibliothèques dynamiques (« Shared Object ») et les « *.a » qui forment les bibliothèques statiques. Les fichiers « *.a » sont en fait eux-mêmes des archives, produites avec l'archiveur historique ar, qui a notamment été dérivé en tar (Tape Archiver) par la suite. Donc ici, un outil qui se contente de rassembler plusieurs fichiers en un seul, bout à bout et sans même les comprimer.

    Donc un « *.a » n'est même pas forcément, en soi, une bibliothèque statique. Mais quand c'est le cas, le fichier « *.a » sert en fait uniquement à rassembler tous les fichiers objets « *.o » produits par le compilateur. Y faire référence permet de les utiliser exactement comme si c'était notre compilateur lui-même qui venait de compiler différentes unités « *.c » vers leur fichier objet « *.o ».

  4. #4
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 642
    Points
    7 642
    Par défaut
    Bonjour,
    Citation Envoyé par gronaze Voir le message
    Effectivement, je travaille sur un projet avec un OS temps réel maison, avec chaque tâche compilée séparément.
    Chaque tâche fait appel à une même bibliothèque statique, et chaque tâche est compilée avec sa bibliothèque.
    Si tu utilises un OS maison, c'est l'OS qui doit gérer les shared area, il faut voir avec sa documentation.
    Par exemple, pour un module dynamique utilisé par 3 taches, tu auras de 1 à 4 segments pour gérer la RAM du module et un seul segment partagé pour sa ROM.

Discussions similaires

  1. Réponses: 11
    Dernier message: 17/04/2014, 15h45
  2. Bibliothèques statiques (.lib) vs dynamiques (.dll)
    Par ceugniet dans le forum Visual C++
    Réponses: 7
    Dernier message: 01/03/2010, 15h54
  3. [MySQL] Différence : tableau statique (hardcodé) et tableau dynamique (mysql) ?
    Par vandeyy dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 30/01/2007, 16h09
  4. Utiliser une bibliothèque statique
    Par djflex68 dans le forum MFC
    Réponses: 6
    Dernier message: 15/08/2005, 19h26
  5. librairie statique/dynamique
    Par trop_wizz dans le forum MFC
    Réponses: 4
    Dernier message: 11/04/2005, 10h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo