Mail Archives: cygwin/1997/05/16/14:26:01
Hi,
I've been using gnu-win32 since back in the v16 days, but never
seriously until now. I downloaded v18 recently and attempted to make
a relocatable dll following all the instructions I could find (thanks
to the people who forged the path :-)). All the files below were
taken from the instructions at
http://www.cygnus.com/misc/gnu-win32/building-reloc-dlls.txt.
My problem is I can't resolve one symbol that appears to be related to
the dll creation.
Here's fixup.c :
asm(".section .idata$3\n" ".long 0,0,0,0, 0,0,0,0");
Here's init.cc
#include <windows.h>
extern "C"
{
int WINAPI dll_entry (HANDLE h, DWORD reason, void *ptr);
};
int WINAPI dll_entry (HANDLE ,
DWORD reason,
void *)
{
switch (reason)
{
case DLL_PROCESS_ATTACH:
break;
case DLL_PROCESS_DETACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
return 1;
}
Here's my "makedll" script:
#! /bin/sh
LIBPATH=//d/gnuwin32/b18/H-i386-cygwin32/i386-cygwin32/lib
#tclMtherr.o \
#make a .def file
echo EXPORTS > tclvc.def
nm \
regexp.o tclAppInit.o tclAsync.o tclBasic.o tclCkalloc.o \
tclClock.o tclCmdAH.o tclCmdIL.o tclCmdMZ.o tclDate.o tclEnv.o \
tclEvent.o tclExpr.o tclFCmd.o tclFHandle.o tclFileName.o tclGet.o \
tclHash.o tclHistory.o tclIO.o tclIOCmd.o tclIOSock.o tclIOUtil.o \
tclInterp.o tclLink.o tclLoad.o tclLoadNone.o tclMain.o \
tclNotify.o tclParse.o tclPkg.o tclPosixStr.o tclPreserve.o tclProc.o \
tclUnixChan.o tclUnixFCmd.o tclUnixFile.o tclUnixInit.o tclUnixNotfy.o \
tclUnixPipe.o tclUnixSock.o tclUnixTime.o tclUtil.o tclVar.o panic.o \
init.o fixup.o | grep '^........ [T] _' | sed 's/[^_]*_//' >> tclvc.def
#link DLL
ld --base-file tclvc.base --dll -o tcl76.dll \
regexp.o tclAppInit.o tclAsync.o tclBasic.o tclCkalloc.o \
tclClock.o tclCmdAH.o tclCmdIL.o tclCmdMZ.o tclDate.o tclEnv.o \
tclEvent.o tclExpr.o tclFCmd.o tclFHandle.o tclFileName.o tclGet.o \
tclHash.o tclHistory.o tclIO.o tclIOCmd.o tclIOSock.o tclIOUtil.o \
tclInterp.o tclLink.o tclLoad.o tclLoadNone.o tclMain.o \
tclNotify.o tclParse.o tclPkg.o tclPosixStr.o tclPreserve.o tclProc.o \
tclUnixChan.o tclUnixFCmd.o tclUnixFile.o tclUnixInit.o tclUnixNotfy.o \
tclUnixPipe.o tclUnixSock.o tclUnixTime.o tclUtil.o tclVar.o panic.o \
init.o fixup.o $LIBPATH/libcygwin.a -e _dll_entry AT 12
dlltool --as=as --dllname tcl76.dll --def tclvc.def --base-file tclvc.base \
--output-exp tclvc.exp
ld --base-file tclvc.base tclvc.exp --dll -o tcl76.dll \
regexp.o tclAppInit.o tclAsync.o tclBasic.o tclCkalloc.o \
tclClock.o tclCmdAH.o tclCmdIL.o tclCmdMZ.o tclDate.o tclEnv.o \
tclEvent.o tclExpr.o tclFCmd.o tclFHandle.o tclFileName.o tclGet.o \
tclHash.o tclHistory.o tclIO.o tclIOCmd.o tclIOSock.o tclIOUtil.o \
tclInterp.o tclLink.o tclLoad.o tclLoadNone.o tclMain.o \
tclNotify.o tclParse.o tclPkg.o tclPosixStr.o tclPreserve.o tclProc.o \
tclUnixChan.o tclUnixFCmd.o tclUnixFile.o tclUnixInit.o tclUnixNotfy.o \
tclUnixPipe.o tclUnixSock.o tclUnixTime.o tclUtil.o tclVar.o panic.o \
init.o fixup.o $LIBPATH/libcygwin.a -e _dll_entry AT 12
dlltool --as=as --dllname tcl76.dll --def tclvc.def --base-file tclvc.base \
--output-lib tcl76.a
ld tclvc.exp --dll -o tcl76.dll \
regexp.o tclAppInit.o tclAsync.o tclBasic.o tclCkalloc.o \
tclClock.o tclCmdAH.o tclCmdIL.o tclCmdMZ.o tclDate.o tclEnv.o \
tclEvent.o tclExpr.o tclFCmd.o tclFHandle.o tclFileName.o tclGet.o \
tclHash.o tclHistory.o tclIO.o tclIOCmd.o tclIOSock.o tclIOUtil.o \
tclInterp.o tclLink.o tclLoad.o tclLoadNone.o tclMain.o \
tclNotify.o tclParse.o tclPkg.o tclPosixStr.o tclPreserve.o tclProc.o \
tclUnixChan.o tclUnixFCmd.o tclUnixFile.o tclUnixInit.o tclUnixNotfy.o \
tclUnixPipe.o tclUnixSock.o tclUnixTime.o tclUtil.o tclVar.o panic.o \
init.o fixup.o $LIBPATH/libcygwin.a -e _dll_entry AT 12
#build the tclvc.a lib to link to
dlltool --as=as --dllname tcl76.dll --def tclvc.def --output-lib tcl76.a
#link with main
gcc tclAppInit.c tcl76.a -o tclsh76.exe
Here's the output when I run it:
//d/gnuwin32/b18/H-i386-cygwin32/i386-cygwin32/lib/libcygwin.a(libccrt0.o)(.text+0x8a):libccrt0.cc: undefined reference to `GetModuleHandleA AT 4'
//d/gnuwin32/b18/H-i386-cygwin32/i386-cygwin32/lib/libcygwin.a(libccrt0.o)(.text+0x8a):libccrt0.cc: undefined reference to `GetModuleHandleA AT 4'
//d/gnuwin32/b18/H-i386-cygwin32/i386-cygwin32/lib/libcygwin.a(libccrt0.o)(.text+0x8a):libccrt0.cc: undefined reference to `GetModuleHandleA AT 4'
Is libcygwin.a missing this symbol or is there another lib I should
link with? Have I missed something obvious? I'll keep poking at my
installation to see if I've hosed something.
FWIW, my platform is NT4.0.
Thanks for your thoughts!
Rgds,
Bret
--
Bret A. Schuhmacher - Software Engineer
bas AT healthcare DOT com These opinions are no one's
Healthcare Communications, Inc. fault by my own.
I stopped to think and forgot how to start again.
-
For help on using this list (especially unsubscribing), send a message to
"gnu-win32-request AT cygnus DOT com" with one line of text: "help".
- Raw text -