Most binary distributions created for the Windows platform are built using Microsoft Visual C++. This does not mean that you have to develop or build extensions using this compiler (unless they are exporting C++ symbols!). All you need is a suitable link library and then your mingw32 built application can use the same DLLs as everyone else. For information about the native windows version of the GNU C compiler go to http://www.mingw.org/ .
To build a useful mingw32 gcc link library from the Tcl dlls we can either work from the DLL or the .LIB files provided. We need to get hold of a copy of sed for win32 from somewhere like http://www.wzw.tu-muenchen.de/~syring/win32/UnxUtils.html and either use the nm provided with mingw32 gcc or get dumpbin from a Microsoft download site.
Peter Lewerin (2001-10-25): I have used the sed from the DJGPP package for MS-DOS under Windows. Go to http://www.delorie.com/djgpp/zip-picker.html , select an ftp server, and look for the file pub/simtelnet/gnu/djgpp/v2gnu/sed3028b.zip on that server. You will probably need a minimal install of DJGPP to make it work.
Working from a DLL
Placing Makefile in your tcl lib directory (...\Tcl\lib) should do what is needed. You need dumpbin and sed in your path plus the exports.sed script given below.
Working from a .LIB file
.LIB files are the normal Microsoft compiler link libraries. Edit the Makefile by uncommenting the *.def sections and commenting the alternative .def sections. The dlltool section remains the same.
# Makefile - Copyright (C) 2001 Pat Thoyts <[email protected]> # # How to create a gcc compatible linker library for a DLL from an MSVC # produced .LIB file or DLL. If you want to use the .LIB files, swap over # the commented sections and build the .DEF file using the other method. DLLTOOL=dlltool --kill-at all: libtcl83.a libtk83.a #------------------------------------------------------------------------- tcl83.def: echo EXPORTS > $@ dumpbin /exports ..\bin\tcl83.dll | sed -nf exports.sed >> $@ #tcl83.def: # echo EXPORTS > $@ # nm tcl83.lib | sed -n "/00000000 T/s/\([^_]*_\)//p" >> $@ libtcl83.a: tcl83.def $(DLLTOOL) --dllname ../bin/tcl83.dll --input-def $< --output-lib $@ #------------------------------------------------------------------------- tk83.def: echo EXPORTS > $@ dumpbin /exports ..\bin\tk83.dll | sed -nf exports.sed >> $@ #tk83.def: # echo EXPORTS > $@ # nm tk83.lib | sed -n "/00000000 T/s/\([^_]*_\)//p" >> $@ libtk83.a: tk83.def $(DLLTOOL) --dllname ../bin/tk83.dll --input-def $< --output-lib $@ #------------------------------------------------------------------------- clean: @del tcl83.def @del tk83.def realclean: clean @del libtcl83.a @del libtk83.a .PHONY: clean realclean # # Local variables: # mode: makefile # End: #
# exports.sed - Copyright (C) 2001 Pat Thoyts <[email protected]> # # Build an exports list from a Windows DLL. # /[ ]*ordinal hint/,/^[ ]*Summary/{ /^[ ]\+[0123456789]\+/{ s/^[ ]\+[0123456789]\+[ \t]\+[0123456789ABCDEFabcdef]\+[ ]\+[0123456789ABCDEFabcdef]\+[ ]\+\(.*\)/\1/p } }
Go back to Building Tcl DLL's for Windows