Lazarus/FPC Libraries/fr: what changed
Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.
Title: Lazarus/FPC Libraries/fr
| Old | New | Line | |
|---|---|---|---|
| 1 | + | Cette page décrit les possibilités de création de bibliothèques avec Lazarus/FPC et comment les utiliser dans les projets et les paquets . | |
| 2 | + | ||
| 3 | + | ## Matières relatives | |
| 4 | + | ||
| 5 | + | - [[Creating bindings for C libraries/fr|Créer des attaches pour les bibliothèques C]] - Comment convertir les entêtes de fichiers C (.h) vers des unités pascal | |
| 6 | + | ||
| 7 | + | ## Généralités | |
| 8 | + | ||
| 9 | + | Liaison statique: FPC compile et effectue les liens par défaut d'un executable statique. Cela signifie qu'il indique à l'éditeur de liens de mettre tous les fichiers .o du projet et tous les paquets dans un grand exécutable . Avantage : aucune dépendance externe . Inconvénient : Aucun code n'est partagé entre les différents programmes sur le même ordinateur. Et vous ne pouvez pas charger/décharger un plugin. | |
| 10 | + | ||
| 11 | + | Librairies dynamiques: L'idée des bibliothèques dynamiques est partager le code entre les programmes, sauvegardant la mémoire du code , réduisant le temps de démarrage pour les bibliothèques souvent employées et permettant les plugins. Les inconvénients des bibliothèques dynamiques sont : elles sont plus lentes pour les bibliothèques rarement utilisées, leur structure et leur intérieur sont plus compliqués (c'est principalement un problème pour le compilateur), leur initialisation est différente (voir ci-dessous ) et partager du code exige une version de système pour mélanger seulement le code compatible . | |
| 12 | + | ||
| 13 | + | ## Système d'exploitation | |
| 14 | + | ||
| 15 | + | Bibliothèques dynamiques : | |
| 16 | + | ||
| 17 | + | | **Système d'exploitation** | **Bibliothèque dynamique** | **Bibliothèque statique** | **Prefix de la bibliothèque** | | |
| 18 | + | |----|----|----|----| | |
| 19 | + | | FreeBSD | .so | .a | lib | | |
| 20 | + | | macOS | .dylib | .a | lib | | |
| 21 | + | | Linux | .so | .a | lib | | |
| 22 | + | | Windows | .dll | .lib | \- | | |
| 23 | + | | Haiku | .so | .a | lib | | |
| 24 | + | ||
| 25 | + | ### FreeBSD | |
| 26 | + | ||
| 27 | + | ### macOS | |
| 28 | + | ||
| 29 | + | ### Linux | |
| 30 | + | ||
| 31 | + | Un nom de fichier d'une bibliothèque dynamique a toujours la forme 'lib'+nom de paquet+'.so'+version. Par exemple : libz.so.1 and libz.so.1.2.2. | |
| 32 | + | ||
| 33 | + | Linux recherche une bibliothèque dans les chemins de la variable d'environnement LD_LIBRARY_PATH, puis dans /lib, puis /usr/lib et finalement les chemins de /etc/ld.so.conf. | |
| 34 | + | ||
| 35 | + | Pour partager de la mémoire (Chaînes GetMem/FreeMem) avec d'autres bibliothèques (non écrite en FPC) sous Linux vous devriez employer **l'unité cmem**. Cette unité doit être ajoutée comme **la toute première unité dans la section uses** du fichier source du projet principal (typiquement .lpr), de sorte que sa section d'initialisation soit appellée avant que n'importe quelle autre unité puisse assigner la mémoire . | |
| 36 | + | ||
| 37 | + | ### Windows | |
| 38 | + | ||
| 39 | + | Windows recherche une bibliothèque dans le répertoire courant, le répertoire system et la variable d'environnement PATH. | |
| 40 | + | ||
| 41 | + | ## ppumove, .ppu, .ppl | |
| 42 | + | ||
| 43 | + | FPC crée normalement pour chaque unité un fichier .ppu et un fichier .o. Le **fichier .ppu** contient chaque information importante du fichier .pas/.pp (les types, les noms de fichier requis comme le fichier .o), tandis que **le fichier .o** contient le code assembleur et les noms mutilés compris par le système courant . | |
| 44 | + | ||
| 45 | + | L'outil **ppumove** inclus avec chaque installation FPC , convertis un ou plusieurs fichiers .ppu et .o dans une bibliothèque dynamique. Il fait ceci en appelant l'éditeur de liens pour recueillir tous les fichier .o dans a un fichier .so (pour windows: .ddl) et enlève les références au nom de fichier .o depuis le fichier .ppu. Ces nouveaux fichiers .ppu s'appellent normalement les **fichiers .ppl**. | |
| 46 | + | ||
| 47 | + | Par exemple : | |
| 48 | + | ||
| 49 | + | Vous avez le répertoire de sortie d'un paquet (où les fichiers .ppu sont): | |
| 50 | + | ||
| 51 | + | ` ppumove -o packagename -e ppl *.ppu` | |
| 52 | + | ||
| 53 | + | Ceci convertira tous les fichiers .ppu en fichiers .ppl et créera un fichier libpackagename.so (pour windows: packagename.dll). Noter que sous Linux le préfixe 'lib' est toujours ajouté au début. | |
| 54 | + | ||
| 55 | + | Cette nouvelle bibliothèque peut déjà être employée par d'autres langages de programmation comme C. Ou par des programmes FPC en employant les modificateurs **externe**. Mais les sections initialization/finalization doivent être appelées automatiquement . Ceci inclut le sections initialization/finalization du gestionnaire du tas. Ceci signifie aucune chaîne ou GetMem. Naturellement les programmeurs FPC sont spoilés et ils peuvent obtenir plus . | |
| 56 | + | ||
| 57 | + | ## dlopen - chargement d'une bibliothèque dynamique | |
| 58 | + | ||
| 59 | + | Charger une bibliothèque dynamique est simple avec la fonction **dlopen** de **l'unité dl**. | |
| 60 | + | ||
| 61 | + | ToDo: donner un exemple | |
| 62 | + | ||
| 63 | + | Le problème principal est d'obtenir le nom de fichier , qui dépend de la version et du système d'exploitation. | |
| 64 | + | ||
| 65 | + | ## Initialization | |
| 66 | + | ||
| 67 | + | Chaque unité peut contenir une section d'initialisation . L'ordre des sections d'initialisation dépend des section de chaque unité . | |
| 68 | + | ||
| 69 | + | Comment initialiser une bibliothèque dynamique : ToDo | |
| 70 | + | ||
| 71 | + | ## Finalization | |
| 72 | + | ||
| 73 | + | Chaque unité peut contenir une section finalization. L'ordre est l'ordre inverse des sections initialization. | |
| 74 | + | ||
| 75 | + | ## Versions, Distribution | |
| 76 | + | ||
| 77 | + | Les bibliothèques tendent à se développer et changent au cours du temps. Ajouter de nouvelles fonctionnalités n'est pas un problème , mais enlever une méthode publique ou changer ses paramètres rend la bibliothèque incompatible . Cela siginifie soit une bibliothèque installée (.so, .dll, .dylib) est remplacée par une autre compatible **soit** une nouvelle bibliothèque doit être ajoutée au système . C'est pourquoi chaque bibliothèque contient une version . | |
| 78 | + | ||
| 79 | + | Pour charger une bibliothèque dynamique (**dlopen** de **l'unité dl**) le nom de fichier correct doit être connu . Sous Linux ceci signifie , vous devez savoir le numéro de version . | |
| 80 | + | ||
| 81 | + | ToDo: proposer comment l'IDE devrait créer des numeros de version | |
| 82 | + | ||
| 83 | + | --- | |
| 84 | + | *From the Free Pascal wiki, page "Lazarus/FPC Libraries/fr", as it stood on 2021-09-23 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).* |
