From: js AT servisoft DOT pt (Joao Pedro Sousa) Subject: Linking with -lkernel32 [was: Re: beta18: building gdb gives incomplete import table [and other problems]???] 31 Dec 1997 07:51:58 -0800 Message-ID: <3.0.5.32.19971231153549.0079dc70.cygnus.gnu-win32@mail.servisoft.pt> References: <19971231123414 DOT 00894 AT mundook DOT cs DOT mu DOT OZ DOT AU> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" To: Fergus Henderson Cc: gnu-win32 AT cygnus DOT com At 12:34 31-12-1997 +1100, Fergus Henderson wrote: >... >One bug with the linker that has been mentioned on this list previously >is that if the same library name is mentioned twice on the link line, >then the linker generates executables that crash. `-lkernel32' is >linked in by default, so if you mention it explicitly then it will >get linked in twice, causing the symptoms you observed. > >-- >Fergus Henderson | "I have always known that the pursuit >WWW: | of excellence is a lethal habit" >PGP: finger fjh AT 128 DOT 250 DOT 37 DOT 3 | -- the last words of T. S. Garp. I can't successfully link DLLs (relocatable or non-relocatable) if I don't include: -lc -lcygwin -lkernel32 -lc Also, this is somewhat consistent with your Makefile.DLLs, an excerpt of which I pasted next: (...) # The `sed' commands below are to convert DOS-style `C:\foo\bar' # pathnames into Unix-style `//c/foo/bar' pathnames. CYGWIN32_LIBS = $(shell echo \ -L`dirname \`gcc -print-file-name=libgcc.a | \ sed -e 's@^\\\\([A-Za-z]\\\\):@//\\\\1 AT g' -e 's@\\\\\\\\@/@g' \` ` \ -L`dirname \`gcc -print-file-name=libcygwin.a | \ sed -e 's@^\\\\([A-Za-z]\\\\):@//\\\\1 AT g' -e 's@\\\\\\\\@/@g' \` ` \ -L`dirname \`gcc -print-file-name=libkernel32.a | \ sed -e 's@^\\\\([A-Za-z]\\\\):@//\\\\1 AT g' -e 's@\\\\\\\\@/@g' \` ` \ -lgcc -lcygwin -lkernel32 -lgcc) # Making relocatable DLLs doesn't seem to work. # Note quite sure why. The --image-base values below # where chosen at random, they seem to work on my machine. RELOCATABLE=no LDFLAGS-libgc += --image-base=0x2345000 LDFLAGS-libmer += --image-base=0x1234000 LDFLAGS-libmercury += --image-base=0x3456000 ifeq "$(strip $(RELOCATABLE))" "yes" # to create relocatable DLLs, we need to do two passes # (warning: this is untested) %.dll: %.exp %.a %_dll.o dll_init.o dll_fixup.o $(LD) $(LDFLAGS) $(LDFLAGS-$*) --dll -o $*.base \ -e _dll_entry AT 12 \ $*.exp $*.a $*_dll.o \ dll_init.o dll_fixup.o \ $(LDLIBS) $(LDLIBS-$*) \ $(CYGWIN32_LIBS) (...) If I understand correctly, you use "-lgcc -lcygwin -lkernel32 -lgcc" among other obvious things. So, should we, or should we not repeat libs? By the way, is there a description of the available libs and their contents? -- JPSousa - 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".