Difference between revisions of "Lazarus/FPC Libraries/fr"
Paulatreides (talk | contribs) |
Paulatreides (talk | contribs) |
||
Line 49: | Line 49: | ||
==ppumove, .ppu, .ppl== | ==ppumove, .ppu, .ppl== | ||
− | FPC | + | 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 . |
− | + | 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'''. | |
− | + | Par exemple : | |
− | + | Vous avez le répertoire de sortie d'un paquet (où les fichiers .ppu sont): | |
ppumove -o packagename -e ppl *.ppu | ppumove -o packagename -e ppl *.ppu | ||
− | + | 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. | |
− | + | 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 . | |
==dlopen - loading a dynamic library== | ==dlopen - loading a dynamic library== |
Revision as of 17:32, 28 June 2007
│
English (en) │
español (es) │
français (fr) │
日本語 (ja) │
русский (ru) │
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 .
Matières relatives
- Créer des attaches pour les bibliothèques C - Comment convertir les entêtes de fichiers C (.h) vers des unités pascal
Généralités
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.
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 .
Système d'exploitation
Bibliothèques dynamiques :
Système d'exploitation | Bibliothèque dynamique | Bibliothèque statique |
---|---|---|
FreeBSD | .so | .a |
MacOSX | .dylib | ? |
Linux | .so | .a |
Windows | .dll | ? |
FreeBSD
MacOSX
Linux
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.
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.
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 .
Windows
Windows recherche une bibliothèque dans le répertoire courant, le répertoire system et la variable d'environnement PATH.
ppumove, .ppu, .ppl
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 .
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.
Par exemple :
Vous avez le répertoire de sortie d'un paquet (où les fichiers .ppu sont):
ppumove -o packagename -e ppl *.ppu
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.
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 .
dlopen - loading a dynamic library
Loading a dynamic library is simple with the dlopen function of the unit dl.
ToDo: give an example
The main problem is to get the filename, which depends on the version and the operating system.
Initialization
Every unit can contain an initialization section. The order of the initialization sections depend on the uses sections of each unit.
How to initialize a dynamic library: ToDo
Finalization
Every unit can contain an finalization section. The order is the reverse order of the initialization sections.
Versions, Distribution
Libraries tend to grow and change over time. Adding new features is no problem, but removing a public method or changing its parameters makes the library incompatible. That means either an installed library (.so, .dll, .dylib) is replaced by a compatible one or a new library must be added to the system. That's why every library contains a version.
To load a dynamic library (dlopen of unit dl) the correct filename must be known. Under Linux this means, you have to know the version number.
ToDo: proposal how the IDE should create version numbers