Section courante

A propos

Section administrative du site

dlltool

Outil DLL
Binutils (GNU Binary Utilities)

Syntaxe

dlltool [-d|--input-def def-file-name]
        [-b|--base-file base-file-name]
        [-e|--output-exp exports-file-name]
        [-z|--output-def def-file-name]
        [-l|--output-lib library-file-name]
        [-y|--output-delaylib library-file-name]
        [--export-all-symbols] [--no-export-all-symbols]
        [--exclude-symbols list]
        [--no-default-excludes]
        [-S|--as path-to-assembler] [-f|--as-flags options]
        [-D|--dllname name] [-m|--machine machine]
        [-a|--add-indirect]
        [-U|--add-underscore] [--add-stdcall-underscore]
        [-k|--kill-at] [-A|--add-stdcall-alias]
        [-p|--ext-prefix-alias prefix]
        [-x|--no-idata4] [-c|--no-idata5]
        [--use-nul-prefixed-import-tables]
        [-I|--identify library-file-name] [--identify-strict]
        [-i|--interwork]
        [-n|--nodelete] [-t|--temp-prefix prefix]
        [-v|--verbose]
        [-h|--help] [-V|--version]
        [--no-leading-underscore] [--leading-underscore]
        [--deterministic-libraries] [--non-deterministic-libraries]
        [object-file ...]

Paramètres

Nom Description
-A Ce paramètre permet d'indiquer que lorsque dlltool crée le fichier d'exportation, il doit ajouter des alias pour les symboles stdcall sans «@number» en plus des symboles avec «@number».
-a Ce paramètre permet d'indiquer que lorsque dlltool crée le fichier d'exportation, il doit ajouter une section permettant de référencer les fonctions exportées sans utiliser la bibliothèque d'importation. Qu'importe ce que ça veut dire !
--add-stdcall-alias Ce paramètre permet d'indiquer que lorsque dlltool crée le fichier d'exportation, il doit ajouter des alias pour les symboles stdcall sans «@number» en plus des symboles avec «@number».
--add-indirect Ce paramètre permet d'indiquer que lorsque dlltool crée le fichier d'exportation, il doit ajouter une section permettant de référencer les fonctions exportées sans utiliser la bibliothèque d'importation. Qu'importe ce que ça veut dire !
--add-stdcall-underscore Ce paramètre permet d'indiquer que lorsque dlltool crée le fichier d'exportation, il doit ajouter un trait de soulignement aux noms des fonctions stdcall exportées. Les noms de variables et les noms de fonctions non stdcall ne sont pas modifiés. Cette option est utile lors de la création de bibliothèques d'importation compatibles GNU pour des DLL tierces créées avec les outils Windows de Microsoft.
--add-underscore Ce paramètre permet d'indiquer que lorsque dlltool crée le fichier d'exportation, il doit ajouter un trait de soulignement aux noms de tous les symboles exportés.
--as path Ce paramètre permet d'indiquer le chemin, y compris le nom de fichier, de l'assembleur à utiliser pour créer le fichier d'exportation.
--as-flags options Ce paramètre permet d'indiquer toutes les options de ligne de commande spécifiques à transmettre à l'assembleur lors de la création du fichier d'exportation. Cette option fonctionnera même si l'option -S n'est pas utilisée. Cette option ne prend qu'un seul paramètre, et si elle apparaît plusieurs fois sur la ligne de commande, les occurrences ultérieures remplaceront les occurrences précédentes. Ainsi, s'il est nécessaire de transmettre plusieurs options à l'assembleur, elles doivent être placées entre guillemets doubles.
-b filename Ce paramètre permet d'indiquer le nom d'un fichier de base à lire et à traiter. Le contenu de ce fichier sera ajouté à la section de relocalisation dans le fichier d'exportation généré par dlltool.
--base-file filename Ce paramètre permet d'indiquer le nom d'un fichier de base à lire et à traiter. Le contenu de ce fichier sera ajouté à la section de relocalisation dans le fichier d'exportation généré par dlltool.
-c Ce paramètre permet d'indiquer que lorsque dlltool crée les fichiers d'exportation et de bibliothèque, il doit omettre la section .idata5. Ceci est pour la compatibilité avec certains systèmes d'exploitation.
-D name Ce paramètre permet d'indiquer le nom à entreposer dans le fichier .def comme nom de la DLL lorsque l'option -e est utilisée. Si cette option n'est pas présente, alors le nom de fichier donné à l'option -e sera utilisé comme nom de la DLL.
-d filename Ce paramètre permet d'indiquer le nom d'un fichier .def à lire et à traiter.
--deterministic-libraries Ce paramètre permet d'indiquer la valeur zéro pour tous les horodatages, identificateurs d'utilisateur et identificateurs de groupe créés (--deterministic-libraries) ou les horodatages réels, l'identificateur utilisateur et l'identificateur de groupe (--bibliothèques non déterministes) lors de la création de bibliothèques de sortie en réponse aux options --output-lib ou --output-delaylib.
--dll-name name Ce paramètre permet d'indiquer le nom à entreposer dans le fichier .def comme nom de la DLL lorsque l'option -e est utilisée. Si cette option n'est pas présente, alors le nom de fichier donné à l'option -e sera utilisé comme nom de la DLL.
-e filename Ce paramètre permet d'indiquer le nom du fichier d'exportation à créer par dlltool.
--exclude-symbols list Ce paramètre permet d'indiquer qu'il ne faut pas exporter les symboles dans la liste. Il s'agit d'une liste de noms de symboles séparés par des virgules ou des deux-points. Les noms de symboles ne doivent pas contenir de trait de soulignement. Cela n'a de sens que lorsque --export-all-symbols est utilisé.
--export-all-symbols Ce paramètre permet de traiter tous les symboles globaux et faiblement définis trouvés dans les fichiers objets d'entrée comme des symboles à exporter. Il existe une petite liste de symboles n'étant pas exportés par défaut ; voir l'option --no-default-excludes. Vous pouvez ajouter à la liste des symboles à ne pas exporter en utilisant l'option --exclude-symbols.
--ext-prefix-alias prefix Ce paramètre permet de demander à dlltool de créer des alias externes pour toutes les importations de DLL avec le préfixe spécifié. Les alias sont créés pour les symboles externes et importés sans trait de soulignement au début.
-f options Ce paramètre permet d'indiquer toutes les options de ligne de commande spécifiques à transmettre à l'assembleur lors de la création du fichier d'exportation. Cette option fonctionnera même si l'option -S n'est pas utilisée. Cette option ne prend qu'un seul paramètre, et si elle apparaît plusieurs fois sur la ligne de commande, les occurrences ultérieures remplaceront les occurrences précédentes. Ainsi, s'il est nécessaire de transmettre plusieurs options à l'assembleur, elles doivent être placées entre guillemets doubles.
-h Ce paramètre permet d'afficher une liste d'options de ligne de commande, puis quitte.
--help Ce paramètre permet d'afficher une liste d'options de ligne de commande, puis quitte.
-I filename Ce paramètre permet d'indiquer que dlltool doit inspecter la bibliothèque d'importation indiquée par le nom de fichier et signaler, sur la sortie standard, le(s) nom(s) de la ou des DLL associées. Cela peut être effectué en plus de toute autre opération indiquée par les autres options et paramètres. dlltool échoue si la bibliothèque d'importation n'existe pas ou n'est pas réellement une bibliothèque d'importation. Voir aussi --identify-strict.
-i Ce paramètre permet d'indiquer que dlltool doit marquer les objets dans le fichier de bibliothèque et exporter le fichier qu'il produit comme prenant en charge l'interfonctionnement entre le code ARM et Thumb.
--identify filename Ce paramètre permet d'indiquer que dlltool doit inspecter la bibliothèque d'importation indiquée par le nom de fichier et signaler, sur la sortie standard, le(s) nom(s) de la ou des DLL associées. Cela peut être effectué en plus de toute autre opération indiquée par les autres options et paramètres. dlltool échoue si la bibliothèque d'importation n'existe pas ou n'est pas réellement une bibliothèque d'importation. Voir aussi --identify-strict.
--identify-strict Ce paramètre permet de modifier le comportement de l'option --identify, de sorte qu'une erreur soit signalée si le nom de fichier est associé à plusieurs DLL.
--input-def filename Ce paramètre permet d'indiquer le nom d'un fichier .def à lire et à traiter.
--interwork Ce paramètre permet d'indiquer que dlltool doit marquer les objets dans le fichier de bibliothèque et exporter le fichier qu'il produit comme prenant en charge l'interfonctionnement entre le code ARM et Thumb.
-k Ce paramètre permet d'indiquer que les suffixes «@number» doivent être omis des noms des fonctions stdcall étant importées depuis la DLL. Ceci est utile lors de la création d'une bibliothèque d'importation pour une DLL exportant des fonctions d'appel standard mais sans le suffixe habituel de nom de symbole '@number'. Cela ne modifie pas le nom des symboles fournis par la bibliothèque d'importation aux programmes liés à celle-ci, mais uniquement les entrées dans la table d'importation (c'est-à-dire la section .idata).
--kill-at Ce paramètre permet d'indiquer que les suffixes «@number» doivent être omis des noms des fonctions stdcall étant importées depuis la DLL. Ceci est utile lors de la création d'une bibliothèque d'importation pour une DLL exportant des fonctions d'appel standard mais sans le suffixe habituel de nom de symbole '@number'. Cela ne modifie pas le nom des symboles fournis par la bibliothèque d'importation aux programmes liés à celle-ci, mais uniquement les entrées dans la table d'importation (c'est-à-dire la section .idata).
-l filename Ce paramètre permet d'indiquer le nom du fichier de bibliothèque à créer par dlltool.
--leading-underscore Ce paramètre permet d'indiquer si le symbole standard doit être forcé ou non à être préfixé.
-m machine Ce paramètre permet d'indiquer le type de machine pour laquelle le fichier de bibliothèque doit être créé. dlltool a un type par défaut intégré, en fonction de la manière dont il a été créé, mais cette option peut être utilisée pour le remplacer. Ceci n'est normalement utile que lors de la création de DLL pour un microprocesseur ARM, lorsque le contenu de la DLL est réellement codé à l'aide des instructions Thumb.
-machine machine Ce paramètre permet d'indiquer le type de machine pour laquelle le fichier de bibliothèque doit être créé. dlltool a un type par défaut intégré, en fonction de la manière dont il a été créé, mais cette option peut être utilisée pour le remplacer. Ceci n'est normalement utile que lors de la création de DLL pour un microprocesseur ARM, lorsque le contenu de la DLL est réellement codé à l'aide des instructions Thumb.
-n Ce paramètre permet de conserver les fichiers assembleur temporaires qu'il a utilisés pour créer le fichier d'exportation. Si cette option est répétée, dlltool conservera également les fichiers objets temporaires qu'il utilise pour créer le fichier de bibliothèque.
--no-default-excludes Ce paramètre permet, lorsque --export-all-symbols est utilisé, d'éviter par défaut d'exporter certains symboles spéciaux. La liste actuelle des symboles à éviter d'exporter est «DllMain@12», «DllEntryPoint@0», «impure_ptr». Vous pouvez utiliser l'option --no-default-excludes pour continuer et exporter ces symboles spéciaux. Cela n'a de sens que lorsque --export-all-symbols est utilisé.
--nodelete Ce paramètre permet de conserver les fichiers assembleur temporaires qu'il a utilisés pour créer le fichier d'exportation. Si cette option est répétée, dlltool conservera également les fichiers objets temporaires qu'il utilise pour créer le fichier de bibliothèque.
--no-export-all-symbols Ce paramètre permet d'indiquer qu'il faut uniquement exporter que les symboles explicitement répertoriés dans un fichier d'entrée .def ou dans les sections «.directve» des fichiers objets d'entrée. Il s'agit du comportement par défaut. Les sections «.drectve» sont créées par les attributs «dllexport» dans le code source.
--no-idata4 Ce paramètre permet d'indiquer que lorsque dlltool crée les fichiers d'exportation et de bibliothèque, il doit omettre la section .idata4. Ceci est pour la compatibilité avec certains systèmes d'exploitation.
--no-idata5 Ce paramètre permet d'indiquer que lorsque dlltool crée les fichiers d'exportation et de bibliothèque, il doit omettre la section .idata5. Ceci est pour la compatibilité avec certains systèmes d'exploitation.
--no-leading-underscore Ce paramètre permet d'indiquer si le symbole standard doit être forcé ou non à être préfixé.
--non-deterministic-libraries Ce paramètre permet d'indiquer la valeur zéro pour tous les horodatages, identificateurs d'utilisateur et identificateurs de groupe créés (--deterministic-libraries) ou les horodatages réels, l'identificateur utilisateur et l'identificateur de groupe (--bibliothèques non déterministes) lors de la création de bibliothèques de sortie en réponse aux options --output-lib ou --output-delaylib.
--output-def filename Ce paramètre permet d'indiquer le nom du fichier .def à créer par dlltool.
--output-delaylib filename Ce paramètre permet d'indiquer le nom du fichier de bibliothèque d'importation différée à créer par dlltool.
--output-exp filename Ce paramètre permet d'indiquer le nom du fichier d'exportation à créer par dlltool.
--output-lib filename Ce paramètre permet d'indiquer le nom du fichier de bibliothèque à créer par dlltool.
-p Ce paramètre permet de demander à dlltool de créer des alias externes pour toutes les importations de DLL avec le préfixe spécifié. Les alias sont créés pour les symboles externes et importés sans trait de soulignement au début.
-S path Ce paramètre permet d'indiquer le chemin, y compris le nom de fichier, de l'assembleur à utiliser pour créer le fichier d'exportation.
-t prefix Ce paramètre permet de faire en sorte que dlltool utilise un préfixe lors de la construction des noms des fichiers assembleur et objets temporaires. Par défaut, le préfixe du fichier temporaire est généré à partir du pid.
--temp-prefix prefix Ce paramètre permet de faire en sorte que dlltool utilise un préfixe lors de la construction des noms des fichiers assembleur et objets temporaires. Par défaut, le préfixe du fichier temporaire est généré à partir du pid.
-U Ce paramètre permet d'indiquer que lorsque dlltool crée le fichier d'exportation, il doit ajouter un trait de soulignement aux noms de tous les symboles exportés.
--use-nul-prefixed-import-tables Ce paramètre permet d'indiquer que lorsque dlltool crée les fichiers d'exportation et de bibliothèque, il doit préfixer les éléments .idata4 et .idata5 par zéro. Ceci émule l'ancienne génération de bibliothèque d'importation GNU de dlltool. Par défaut, cette option est désactivée.
-V Ce paramètre permet d'afficher le numéro de version de dlltool, puis se ferme.
-v Ce paramètre permet d'indiquer qu'il faut un affichage détaillé. Faites en sorte que dlltool décrive ce qu'il fait.
--verbose Ce paramètre permet d'indiquer qu'il faut un affichage détaillé. Faites en sorte que dlltool décrive ce qu'il fait.
--version Ce paramètre permet d'afficher le numéro de version de dlltool, puis se ferme.
-x Ce paramètre permet d'indiquer que lorsque dlltool crée les fichiers d'exportation et de bibliothèque, il doit omettre la section .idata4. Ceci est pour la compatibilité avec certains systèmes d'exploitation.
-y filename Ce paramètre permet d'indiquer le nom du fichier de bibliothèque d'importation différée à créer par dlltool.
-z filename Ce paramètre permet d'indiquer le nom du fichier .def à créer par dlltool.

Description

Cette commande permet de créer des fichiers pour créer et utiliser des DLL.

Le dlltool lit ses entrées, pouvant provenir des options -d et -b ainsi que des fichiers objets spécifiés sur la ligne de commande. Il traite ensuite ces entrées et si l'option -e a été spécifiée, il crée un fichier d'exportation. Si l'option -l a été spécifiée, elle crée un fichier de bibliothèque et si l'option -z a été spécifiée, elle crée un fichier def. Tout ou partie des options -e, -l et -z peuvent être présentes dans une seule invocation de dlltool.

Lors de la création d'une DLL, ainsi que la source de la DLL, il est nécessaire de disposer de trois autres fichiers. Le dlltool peut aider à la création de ces fichiers.

Le premier fichier est un fichier .def spécifiant quelles fonctions sont exportées à partir de la DLL, quelles fonctions sont importées par la DLL,... Il s'agit d'un fichier texte pouvant être créé à la main, ou dlltool peut être utilisé pour le créer à l'aide de l'option -z. Dans ce cas, dlltool analysera les fichiers objets spécifiés sur sa ligne de commande à la recherche des fonctions spécialement marquées comme étant exportées et placera les entrées correspondantes dans le fichier .def qu'il crée.

Afin de marquer une fonction comme étant exportée à partir d'une DLL, elle doit avoir une entrée -export:name_of_function dans la section «.drectve» du fichier objet. Cela peut être fait en C en utilisant l'opérateur asm() :

  1. asm (".section .drectve");
  2. asm (".ascii \"-export:ma_fonction\"");
  3.  
  4. int ma_fonction(void) { 
  5.  /* ... */
  6. }

Le deuxième fichier nécessaire à la création d'une DLL est un fichier d'exportation. Ce fichier est lié aux fichiers objets constituant le corps de la DLL et gère l'interface entre la DLL et le monde extérieur. Il s'agit d'un fichier binaire et il peut être créé en donnant l'option -e à dlltool lors de la création ou de la lecture d'un fichier .def.

Le troisième fichier nécessaire à la création de la DLL est le fichier de bibliothèque avec lequel les programmes se lieront afin d'accéder aux fonctions de la DLL (une « bibliothèque d'importation »). Ce fichier peut être créé en donnant l'option -l à dlltool lors de la création ou de la lecture d'un fichier .def.

Si l'option -y est spécifiée, dlltool génère une bibliothèque d'importation différée pouvant être utilisée à la place de la bibliothèque d'importation normale pour permettre à un programme de se lier à la DLL uniquement dès qu'une fonction importée est appelée pour la première fois. L'exécutable résultant devra être lié à la bibliothèque statique delayimp contenant __delayLoadHelper2(), qui à son tour importera LoadLibraryA et GetProcAddress depuis kernel32.

La dlltool construit le fichier de bibliothèque à la main, mais il construit le fichier d'exportation en créant des fichiers temporaires contenant des instructions assembleur, puis en les assemblant. L'option de ligne de commande -S peut être utilisée pour spécifier le chemin d'accès à l'assembleur que dlltool utilisera, et l'option -f peut être utilisée pour transmettre des indicateurs spécifiques à cet assembleur. Le -n peut être utilisé pour empêcher dlltool de supprimer ces fichiers assembleur temporaires une fois l'opération terminée, et si -n est spécifié deux fois, cela empêchera dlltool de supprimer les fichiers objets temporaires qu'il a utilisés pour construire la bibliothèque.

Voici un exemple de création d'une DLL à partir d'un fichier source «dll.c» et également de création d'un programme (à partir d'un fichier objet appelé «program.o») utilisant cette DLL :

gcc -c dll.c
dlltool -e exports.o -l dll.lib dll.o
gcc dll.o exports.o -o dll.dll
gcc program.o dll.lib -o program

Remarques



Dernière mise à jour : Dimanche, le 3 Septembre 2023