# dlltool

## NAME



           dlltool - create files needed to build and use DLLs
    


## SYNOPSIS



           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 ...]
    


## DESCRIPTION



           **dlltool** reads its inputs, which can come from the **-d** and **-b**
           options as well as object files specified on the command line.  It
           then processes these inputs and if the **-e** option has been
           specified it creates a exports file.  If the **-l** option has been
           specified it creates a library file and if the **-z** option has been
           specified it creates a def file.  Any or all of the **-e** , **-l** and **-z**
           options can be present in one invocation of dlltool.
    
           When creating a DLL, along with the source for the DLL, it is
           necessary to have three other files.  **dlltool** can help with the
           creation of these files.
    
           The first file is a _.def_ file which specifies which functions are
           exported from the DLL, which functions the DLL imports, and so on.
           This is a text file and can be created by hand, or **dlltool** can be
           used to create it using the **-z** option.  In this case **dlltool** will
           scan the object files specified on its command line looking for
           those functions which have been specially marked as being exported
           and put entries for them in the _.def_ file it creates.
    
           In order to mark a function as being exported from a DLL, it needs
           to have an **-export: <name_of_function> **entry in the **.drectve**
           section of the object file.  This can be done in C by using the
           **asm()** operator:
    
                     asm (".section .drectve");
                     asm (".ascii \"-export:my_func\"");
    
                     int my_func (void) { ... }
    
           The second file needed for DLL creation is an exports file.  This
           file is linked with the object files that make up the body of the
           DLL and it handles the interface between the DLL and the outside
           world.  This is a binary file and it can be created by giving the
           **-e** option to **dlltool** when it is creating or reading in a _.def_
           file.
    
           The third file needed for DLL creation is the library file that
           programs will link with in order to access the functions in the
           DLL (an `import library').  This file can be created by giving the
           **-l** option to dlltool when it is creating or reading in a _.def_
           file.
    
           If the **-y** option is specified, dlltool generates a delay-import
           library that can be used instead of the normal import library to
           allow a program to link to the dll only as soon as an imported
           function is called for the first time. The resulting executable
           will need to be linked to the static delayimp library containing
           _**_delayLoadHelper2()** , which in turn will import LoadLibraryA and
           GetProcAddress from kernel32.
    
           **dlltool** builds the library file by hand, but it builds the exports
           file by creating temporary files containing assembler statements
           and then assembling these.  The **-S** command-line option can be used
           to specify the path to the assembler that dlltool will use, and
           the **-f** option can be used to pass specific flags to that
           assembler.  The **-n** can be used to prevent dlltool from deleting
           these temporary assembler files when it is done, and if **-n** is
           specified twice then this will prevent dlltool from deleting the
           temporary object files it used to build the library.
    
           Here is an example of creating a DLL from a source file **dll.c** and
           also creating a program (from an object file called **program.o**)
           that uses that 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
    
           **dlltool** may also be used to query an existing import library to
           determine the name of the DLL to which it is associated.  See the
           description of the **-I** or **--identify** option.
    


## OPTIONS



           The command-line options have the following meanings:
    
           **-d** _filename_
           **--input-def** _filename_
               Specifies the name of a _.def_ file to be read in and processed.
    
           **-b** _filename_
           **--base-file** _filename_
               Specifies the name of a base file to be read in and processed.
               The contents of this file will be added to the relocation
               section in the exports file generated by dlltool.
    
           **-e** _filename_
           **--output-exp** _filename_
               Specifies the name of the export file to be created by
               dlltool.
    
           **-z** _filename_
           **--output-def** _filename_
               Specifies the name of the _.def_ file to be created by dlltool.
    
           **-l** _filename_
           **--output-lib** _filename_
               Specifies the name of the library file to be created by
               dlltool.
    
           **-y** _filename_
           **--output-delaylib** _filename_
               Specifies the name of the delay-import library file to be
               created by dlltool.
    
           **--deterministic-libraries**
           **--non-deterministic-libraries**
               When creating output libraries in response to either the
               **--output-lib** or **--output-delaylib** options either use the value
               of zero for any timestamps, user ids and group ids created
               (**--deterministic-libraries**) or the actual timestamps, user ids
               and group ids (**--non-deterministic-libraries**).
    
           **--export-all-symbols**
               Treat all global and weak defined symbols found in the input
               object files as symbols to be exported.  There is a small list
               of symbols which are not exported by default; see the
               **--no-default-excludes** option.  You may add to the list of
               symbols to not export by using the **--exclude-symbols** option.
    
           **--no-export-all-symbols**
               Only export symbols explicitly listed in an input _.def_ file or
               in **.drectve** sections in the input object files.  This is the
               default behaviour.  The **.drectve** sections are created by
               **dllexport** attributes in the source code.
    
           **--exclude-symbols** _list_
               Do not export the symbols in _list_.  This is a list of symbol
               names separated by comma or colon characters.  The symbol
               names should not contain a leading underscore.  This is only
               meaningful when **--export-all-symbols** is used.
    
           **--no-default-excludes**
               When **--export-all-symbols** is used, it will by default avoid
               exporting certain special symbols.  The current list of
               symbols to avoid exporting is **DllMain@12** , **DllEntryPoint@0** ,
               **impure_ptr**.  You may use the **--no-default-excludes** option to
               go ahead and export these special symbols.  This is only
               meaningful when **--export-all-symbols** is used.
    
           **-S** _path_
           **--as** _path_
               Specifies the path, including the filename, of the assembler
               to be used to create the exports file.
    
           **-f** _options_
           **--as-flags** _options_
               Specifies any specific command-line options to be passed to
               the assembler when building the exports file.  This option
               will work even if the **-S** option is not used.  This option only
               takes one argument, and if it occurs more than once on the
               command line, then later occurrences will override earlier
               occurrences.  So if it is necessary to pass multiple options
               to the assembler they should be enclosed in double quotes.
    
           **-D** _name_
           **--dll-name** _name_
               Specifies the name to be stored in the _.def_ file as the name
               of the DLL when the **-e** option is used.  If this option is not
               present, then the filename given to the **-e** option will be used
               as the name of the DLL.
    
           **-m** _machine_
           **-machine** _machine_
               Specifies the type of machine for which the library file
               should be built.  **dlltool** has a built in default type,
               depending upon how it was created, but this option can be used
               to override that.  This is normally only useful when creating
               DLLs for an ARM processor, when the contents of the DLL are
               actually encode using Thumb instructions.
    
           **-a**
           **--add-indirect**
               Specifies that when **dlltool** is creating the exports file it
               should add a section which allows the exported functions to be
               referenced without using the import library.  Whatever the
               hell that means!
    
           **-U**
           **--add-underscore**
               Specifies that when **dlltool** is creating the exports file it
               should prepend an underscore to the names of _all_ exported
               symbols.
    
           **--no-leading-underscore**
           **--leading-underscore**
               Specifies whether standard symbol should be forced to be
               prefixed, or not.
    
           **--add-stdcall-underscore**
               Specifies that when **dlltool** is creating the exports file it
               should prepend an underscore to the names of exported _stdcall_
               functions. Variable names and non-stdcall function names are
               not modified.  This option is useful when creating
               GNU-compatible import libs for third party DLLs that were
               built with MS-Windows tools.
    
           **-k**
           **--kill-at**
               Specifies that **@ <number> **suffixes should be omitted from the
               names of stdcall functions that will be imported from the DLL.
               This is useful when creating an import library for a DLL which
               exports stdcall functions but without the usual **@ <number>**
               symbol name suffix.
    
               This does not change the naming of symbols provided by the
               import library to programs linked against it, but only the
               entries in the import table (ie the .idata section).
    
           **-A**
           **--add-stdcall-alias**
               Specifies that when **dlltool** is creating the exports file it
               should add aliases for stdcall symbols without **@ <number> **in
               addition to the symbols with **@ <number>**.
    
           **-p**
           **--ext-prefix-alias** _prefix_
               Causes **dlltool** to create external aliases for all DLL imports
               with the specified prefix.  The aliases are created for both
               external and import symbols with no leading underscore.
    
           **-x**
           **--no-idata4**
               Specifies that when **dlltool** is creating the exports and
               library files it should omit the ".idata4" section.  This is
               for compatibility with certain operating systems.
    
           **--use-nul-prefixed-import-tables**
               Specifies that when **dlltool** is creating the exports and
               library files it should prefix the ".idata4" and ".idata5" by
               zero an element. This emulates old gnu import library
               generation of "dlltool". By default this option is turned off.
    
           **-c**
           **--no-idata5**
               Specifies that when **dlltool** is creating the exports and
               library files it should omit the ".idata5" section.  This is
               for compatibility with certain operating systems.
    
           **-I** _filename_
           **--identify** _filename_
               Specifies that **dlltool** should inspect the import library
               indicated by _filename_ and report, on "stdout", the name(s) of
               the associated DLL(s).  This can be performed in addition to
               any other operations indicated by the other options and
               arguments.  **dlltool** fails if the import library does not exist
               or is not actually an import library. See also
               **--identify-strict**.
    
           **--identify-strict**
               Modifies the behavior of the **--identify** option, such that an
               error is reported if _filename_ is associated with more than one
               DLL.
    
           **-i**
           **--interwork**
               Specifies that **dlltool** should mark the objects in the library
               file and exports file that it produces as supporting
               interworking between ARM and Thumb code.
    
           **-n**
           **--nodelete**
               Makes **dlltool** preserve the temporary assembler files it used
               to create the exports file.  If this option is repeated then
               dlltool will also preserve the temporary object files it uses
               to create the library file.
    
           **-t** _prefix_
           **--temp-prefix** _prefix_
               Makes **dlltool** use _prefix_ when constructing the names of
               temporary assembler and object files.  By default, the temp
               file prefix is generated from the pid.
    
           **-v**
           **--verbose**
               Make dlltool describe what it is doing.
    
           **-h**
           **--help**
               Displays a list of command-line options and then exits.
    
           **-V**
           **--version**
               Displays dlltool's version number and then exits.
    
           **@**_file_
               Read command-line options from _file_.  The options read are
               inserted in place of the original @_file_ option.  If _file_ does
               not exist, or cannot be read, then the option will be treated
               literally, and not removed.
    
               Options in _file_ are separated by whitespace.  A whitespace
               character may be included in an option by surrounding the
               entire option in either single or double quotes.  Any
               character (including a backslash) may be included by prefixing
               the character to be included with a backslash.  The _file_ may
               itself contain additional @_file_ options; any such options will
               be processed recursively.
    


* * *