Mail Archives: cygwin/1997/01/27/07:21:47
This is a multi-part message in MIME format.
--------------13D263A96B02
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
> Does any body there can point me how one can generate a def files
> from the source (C/C++) to make DLL's?
I wrote a perl script that automatically generates the DLL definition
file needed to build a C++ DLL. Perhaps it will meet your needs or at
least be a good starting point.
USAGE:
=====
The following is the command line syntax for symbols.pl:
symbols.pl [-i IgnoreFile] [-m|-l] [-o OutputFile] [-t TemplateFile] files ...
where:
-i => specifies ignorable regular expression file (one per line)
-m => map of C++ names to C name-decorated names
-l => list of C name-decorated names (default)
-o => specifies output filename
-t => specifies template filename
The following demonstrates how I could use symbols.pl to create my
defintion file called NtService.def:
perl -S symbols.pl -i NtService.ignore -t NtService.template -o NtService.def NtService.obj
OPTIONS:
=======
The -i option specifies a file of regular expressions (one per line) that
match symbols that you do NOT want to export. For example, here is my
NtService.ignore:
--- begin of NtService.ignore ---
allocator
basic_string
char_traits
list
--- end of NtService.ignore ---
Which shows that I want to ignore some symbols from the Standard Template
Library.
The -m and -l (default) options toggle between the map and list formats.
The map format is just a tab separated list of the C++ names onto the
name-decorated names -- it is intended to be human readable. The list
format just lists the name-decorated names -- it is intended to be used
to construct a DLL definition file.
The -o option specifies the output file name. If not specified, then the
output goes to standard output.
The -t option specifies the template file which is just prepended to the
output stream. For example, here is my NtService.template:
--- begin of NtService.template ---
;
; $Id: NtService.template,v 1.1 1997/01/10 20:13:26 jt Exp $
;
; NtService.def : Declares the module parameters for the DLL.
LIBRARY "NtService"
DESCRIPTION 'NtService Windows Dynamic Link Library'
EXPORTS
--- end of NtService.template ---
MSVC++ Setup:
====== =====
1. Add an .obj file to your project
2. Under "Build/Setting.../Custom Build/Win32 Debug" for the above .obj
file add the following:
Description: Performing Custom Exported Symbol Definition Step
Build command(s): perl -S symbols.pl -i $(ProjDir)\NAME.ignore -t $(ProjDir)\NAME.template -o $(ProjDir)\NAME.def $(InputDir)\*.obj
Output file(s): $(ProjDir)\NAME.def
where:
NAME is a name of your choice
3. Under "Build/Setting.../Custom Build/Win32 Release" for the above .obj
file select "Exclude file from build."
4. Under "Tools/Options.../Directories/Executable files" add the path to
perl.
CAVEATS:
=======
1. symbols.pl needs a later version of perl for Win32 than the one
supplied in the NT Resource Kit. I can supply an older version of
symbols.pl that works with the Resource Kit's version of perl, if
necessary.
2. Debug build must be built before Release builds (to (re)generate the
definition file).
3. Debug builds will always rebuild the definition file and relink the
DLL even if there were no changes to the source.
MISC:
====
1. symbols.pl is attached.
2. perl for Win32 can be found at ActiveWare (http://www.activeware.com/).
2. Do you know how to tell MSVC++ in "Build/Setting.../Custom Build" to
use multiple input files to build one output file?
3. Please provide feedback on bugs, enhancements, etc.
Enjoy,
Jason
--
Jason Tishler Phone: +1 (212) 989-4455 ext. 120
Box Hill Systems Corporation Fax: +1 (212) 989-6817
161 Avenue of the Americas Email: jt AT boxhill DOT com
New York, NY 10013 USA WWW: http://www.boxhill.com
--------------13D263A96B02
Content-Type: application/x-perl; name="symbols.pl"
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename="symbols.pl"
cmVxdWlyZSAnZ2V0b3B0cy5wbCc7DQoNCnN1YiBNYWtlSWdub3JlUmUNCnsNCglteSgkZmls
ZSkgPSBAXzsNCg0KCWlmICgkZmlsZSBlcSAiIikNCgl7DQoJCXJldHVybjsNCgl9DQoNCglv
cGVuKElOUFVULCAkZmlsZSk7DQoJQGxpbmVzID0gPElOUFVUPjsNCgljbG9zZShJTlBVVCk7
DQoJY2hvcChAbGluZXMpOw0KCSRjbGF1c2VzID0gam9pbigifCIsIEBsaW5lcyk7DQoJIl4o
JGNsYXVzZXMpIjsNCn0NCg0Kc3ViIFVzYWdlDQp7DQogICAgcHJpbnQgU1RERVJSIDw8J0VP
RicNCnN5bWJvbHMucGwgWy1pIElnbm9yZUZpbGVdIFstbXwtbF0gWy1vIE91dHB1dEZpbGVd
IFstdCBUZW1wbGF0ZUZpbGVdIGZpbGVzIC4uLg0Kd2hlcmU6DQogICAgLWkgPT4gc3BlY2lm
aWVzIGlnbm9yYWJsZSByZWd1bGFyIGV4cHJlc3Npb24gZmlsZSAob25lIHBlciBsaW5lKQ0K
ICAgIC1tID0+IG1hcCBvZiBDKysgbmFtZXMgdG8gQyBuYW1lLWRlY29yYXRlZCBuYW1lcw0K
ICAgIC1sID0+IGxpc3Qgb2YgQyBuYW1lLWRlY29yYXRlZCBuYW1lcyAoZGVmYXVsdCkNCiAg
ICAtbyA9PiBzcGVjaWZpZXMgb3V0cHV0IGZpbGVuYW1lDQogICAgLXQgPT4gc3BlY2lmaWVz
IHRlbXBsYXRlIGZpbGVuYW1lDQpFT0YNCn0NCg0KIyBQYXJzZSBhbmQgdmFsaWRhdGUgb3B0
aW9ucw0KR2V0b3B0cygnaTptbG86dDonKTsNCmlmICgkI0FSR1YgPT0gLTEpDQp7DQoJVXNh
Z2UoKTsNCglleGl0IDE7DQp9DQoNCiMgT3BlbiBvdXRwdXQgZmlsZSwgaWYgbmVjZXNzYXJ5
DQppZiAoJG9wdF9vIG5lICIiKQ0Kew0KCW9wZW4oU1RET1VULCAiPiRvcHRfbyIpIHx8IGRp
ZSAiQ2FuJ3Qgb3BlbiBcIiRvcHRfb1wiIGZvciB3cml0ZVxuIjsNCn0NCg0KIyBDb3B5IHRl
bXBsYXRlIGZpbGUgdG8gb3V0cHV0LCBpZiBuZWNlc3NhcnkNCmlmICgkb3B0X3QgbmUgIiIp
DQp7DQoJb3BlbihURU1QTEFURSwgJG9wdF90KSB8fCBkaWUgIkNhbid0IG9wZW4gXCIkb3B0
X3RcIiBmb3IgcmVhZFxuIjsNCglwcmludCBTVERPVVQgPFRFTVBMQVRFPjsNCn0NCg0KIyBD
b25zdGFudCBkZWZpbml0aW9ucw0KJGlnbm9yZSA9IE1ha2VJZ25vcmVSZSgkb3B0X2kpOw0K
JGR1bXBiaW4gPSAiZHVtcGJpbiAtc3ltYm9scyBAQVJHViI7DQoNCiMgUnVuIGR1bXBiaW4g
YW5kIHNlbmQgcGFyc2VkIHN5bWJvbHMgaW5mb3JtYXRpb24gdG8gb3V0cHV0DQpvcGVuKERV
TVBCSU4sICIkZHVtcGJpbnwiKTsNCndoaWxlICg8RFVNUEJJTj4pDQp7DQoJaWYgKC8oXFMr
KSBcKChwdWJsaWN8cHJvdGVjdGVkKTogKC4rICk/X19cUysgKFteYF0rKVwpLykNCgl7DQoJ
CWlmICgkNCAhfiAkaWdub3JlKQ0KCQl7DQoJCQlwcmludCBTVERPVVQgKCRvcHRfbSA9PSAx
ICYmICRvcHRfbCAhPSAxKSA/ICIkNFx0JDFcbiIgOiAiXHQkMVxuIjsNCgkJfQ0KCX0NCn0N
Cg0KIyBDbGVhbiB1cA0KY2xvc2UoRFVNUEJJTik7DQpleGl0IDA7DQo=
--------------13D263A96B02--
-
For help on using this list, send a message to
"gnu-win32-request AT cygnus DOT com" with one line of text: "help".
- Raw text -