Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
DLLTOOL(1)		      GNU Development Tools		      DLLTOOL(1)

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]
	     [--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] [-i|--interwork]
	     [-n|--nodelete] [-t|--temp-prefix prefix]
	     [-v|--verbose]
	     [-h|--help] [-V|--version]
	     [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 in-
     puts 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 cre-
     ates.

     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 han-
     dles 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.  This file  can
     be  created by giving the -l option to dlltool when it is creating or read-
     ing in a .def file.

     dlltool builds the library file by hand, but it builds the exports file  by
     creating  temporary  files  containing assembler statements and then assem-
     bling 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 cre-
     ating 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

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.

     --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 op-
	 tion.	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  be-
	 haviour.   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 sep-
	 arated by comma or colon characters.  The symbol names should not  con-
	 tain  a  leading  underscore.	 This  is  only  meaningful  when  --ex-
	 port-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 export-
	 ing is  DllMain@12,  DllEntryPoint@0,	impure_ptr.   You  may	use  the
	 --no-default-excludes	option to go ahead and export these special sym-
	 bols.	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  assem-
	 bler 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 nor-
	 mally 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.

     --add-stdcall-underscore
	 Specifies that when dlltool is creating  the  exports	file  it  should
	 prepend an underscore to the names of exported stdcall functions. Vari-
	 able  names  and non-stdcall function names are not modified.	This op-
	 tion is useful when creating GNU-compatible import libs for third party
	 DLLs that were built with MS-Windows tools.

     -k
     --kill-at
	 Specifies that when dlltool is creating the exports file it should  not
	 append the string @ <number>.	These numbers are called ordinal numbers
	 and  they  represent  another	way  of accessing the function in a DLL,
	 other than by name.

     -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 sym-
	 bols 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.

     -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
     --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 as-
	 sembler and object files.  By default, the temp file prefix  is  gener-
	 ated 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.

SEE ALSO
     The Info pages for binutils.

COPYRIGHT
     Copyright	(c)  1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
     2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.

     Permission is granted to copy, distribute and/or modify this document under
     the terms of the GNU Free Documentation License, Version 1.1 or  any  later
     version  published  by the Free Software Foundation; with no Invariant Sec-
     tions, with no Front-Cover Texts, and with no Back-Cover Texts.  A copy  of
     the license is included in the section entitled "GNU Free Documentation Li-
     cense".

binutils-2.17			   2006-06-23			      DLLTOOL(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=i586-pc-msdosdjgpp-dlltool&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help