Difference between revisions of "Lazarus/FPC Libraries/fr"

From Lazarus wiki
Jump to navigationJump to search
Line 11: Line 11:
 
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.
 
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émarragepour les bibliothèques souvent employées et permettant les plugins.
+
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 .
 
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 .
  

Revision as of 16:09, 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

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

A dynamic library filename has always the form 'lib'+packagename+'.so'+version. For example: libz.so.1 and libz.so.1.2.2.

Linux searches a library in the paths of the environment variable LD_LIBRARY_PATH, then in /lib, then /usr/lib and finally the paths of /etc/ld.so.conf.

To share memory (GetMem/FreeMem, strings) with other libraries (not written in FPC) under Linux you should use the unit cmem. This unit must be added as the very first unit in the uses section of the project main source file (typically .lpr), so that its initialization section is called before any other unit can allocate memory.

Windows

Windows searches a library in the current directory, the system directory and the environment variable PATH.

ppumove, .ppu, .ppl

FPC normally creates for every unit a .ppu and .o file. The .ppu file contains every important information of the .pas/.pp file (types, required filenames like the .o file), while the .o file contains the assembler code and the mangled names understood by the current system.

The ppumove tool included with every FPC installation, converts one or several .ppu and .o files into a dynamic library. It does this by calling the linker to gather all .o files into a .so (windows: .ddl) file and removes the .o filename references from the .ppu file. These new .ppu files are normally called .ppl files.

For example:

You have the output directory of a package (where the .ppu files are):

 ppumove -o packagename -e ppl *.ppu

This will convert all .ppu files into .ppl files and creates a libpackagename.so (windows: packagename.dll). Note that under Linux the prefix 'lib' is always prepended.

This new library can already be used by other programming languages like C. Or by FPC programs by using the external modifiers. But the initialization/finalization sections must be called automatically. This includes the initialization/finalization of the heap manager. This means no strings or GetMem. Of course FPC programmers are spoiled and they can get more.

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