Sign in Join
Wiki copytemporary

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

OldNewLine
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).*

Back to history