Mailing-List: contact cygwin-help AT sourceware DOT cygnus DOT com; run by ezmlm List-Unsubscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT sourceware DOT cygnus DOT com Delivered-To: mailing list cygwin AT sourceware DOT cygnus DOT com From: "Suhaib Siddiqi" To: "Richard" Cc: "Cygwin AT Sourceware DOT Cygnus DOT Com" Subject: RE: Imake and DLLs under Cygwin Date: Wed, 18 Aug 1999 13:06:34 -0400 Message-ID: MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_NextPart_000_002A_01BEE97A.7F6B1A40" X-Priority: 3 (Normal) X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2910.0) In-Reply-To: <37BAE433.C330099C@mcd.alcatel.be> X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2314.1300 Importance: Normal ------=_NextPart_000_002A_01BEE97A.7F6B1A40 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit First you need to figure out the export symbols from your code and write service-def.cpp. You can grab the updates cygwin.cf, cygwin.rules and cygwin.tmpl, plus Imake.cf from cygwin-xfree source tree. It is at sourceware.cygnus.com/pub/cygwin/xfree and would be more helpfull if you direct the further questions from that source tree to cygwin-xfree mailing list. Suhaib -----Original Message----- From: cygwin-owner AT sourceware DOT cygnus DOT com [mailto:cygwin-owner AT sourceware DOT cygnus DOT com]On Behalf Of Richard Sent: Wednesday, August 18, 1999 12:50 PM To: cygwin AT sourceware DOT cygnus DOT com Subject: Imake and DLLs under Cygwin I have an application which I've successfully rebuilt on Solaris. It was configured with imake. I now have a requirement to port it to Cygwin. Using the imake from my X11 distribution there have been various errors due to the Cygwin configuration files (cygwin.tmpl, cygwin.rules ... in X11R6.4/lib/X11/config) being somewhat out-of-date, but these have been solved. The problem comes with the attempt to produce a 'shared library' (DLL on Cygwin of course). The Imakefile uses the imake rule SharedLibraryTarget(...): --------------------------- #define SharedLibraryTarget(libname,rev,solist,down,up) @@\ AllTarget(Concat3(lib,libname,.dll)) @@\ @@\ CppFileTarget(libname.def,libname-def.cpp,-DLIBRARY_VERSION=rev,$(ICONFIGFIL ES)) @@\ --------------------------- which produces the following make rules: --------------------------- service.def:: service-def.cpp $(ICONFIGFILES) $(RM) $@ $(CPP) -DLIBRARY_VERSION=1 $@ clean:: $(RM) service.def junk.c: echo "#include " >junk.c echo "DECLARE_CYGWIN_DLL(dll_main);" >>junk.c echo "int WINAPI dll_main(HANDLE a, DWORD reason, void *q)" >>junk.c echo "{ return 1; }" >>junk.c libservice.dll: $(OBJS) junk.o service.def $(RM) libservice.a $(RM) libservice.dll if [ -f $(BASE_COUNTER) ]; then true; \ else echo 0x67000000 > $(BASE_COUNTER); fi dllwrap -s --def service.def --output-lib libservice.a -o libservice.dll $(OBJS) junk.o $(REQUIREDLIBS) -image-base `cat $(BASE_COUNTER)` IMAGE_LENGTH=`objdump -x libservice.dll |awk '/SizeOfImage/ {print "0x"$$2}'`; \ export IMAGE_LENGTH=`expr '(' \`printf %u $$IMAGE_LENGTH\` / 65536 + 1 ')' '*' 65536` ; \ export IMAGE_BASE=`cat $(BASE_COUNTER)`; \ printf 0x%x `expr \`printf %u $$IMAGE_BASE\` + $$IMAGE_LENGTH` > $(BASE_COUNTER) $(_NULLCMD_) ---------------------------- The problem is that I don't have any service-def.cpp, and I don't know the correct format for it. When I write my own 'service.def' and exclude the 'service.def' rule from the makefile, it fails with: dlltool: unrecognized option `--exclude-symbol=_cygwin_dll_entry AT 12' My dllwrap is version 0.2.4 and dlltool 2.9.4. When I copy the 'dllwrap' line to the command line it runs without error (surprisingly), but the nm says 'No symbols in "libservice.dll"'. Has anyone been though this sort of thing before? ------=_NextPart_000_002A_01BEE97A.7F6B1A40 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
First=20 you need to figure out the export symbols from your code and=20 write
service-def.cpp.
 
You=20 can grab the updates cygwin.cf, cygwin.rules and cygwin.tmpl, plus=20 Imake.cf
from=20 cygwin-xfree source tree.  It is at=20 sourceware.cygnus.com/pub/cygwin/xfree
and=20 would be more helpfull if you direct the further questions from that = source tree=20 to
cygwin-xfree mailing = list.
 
Suhaib
 
-----Original Message-----
From:=20 cygwin-owner AT sourceware DOT cygnus DOT com=20 [mailto:cygwin-owner AT sourceware DOT cygnus DOT com]On Behalf Of=20 Richard
Sent: Wednesday, August 18, 1999 12:50 = PM
To:=20 cygwin AT sourceware DOT cygnus DOT com
Subject: Imake and DLLs under=20 Cygwin

I have an application which I've = successfully=20 rebuilt on Solaris.  It was configured with imake.
I now have = a=20 requirement to port it to Cygwin.  Using the imake from my X11=20 distribution there have been various errors due to the Cygwin = configuration=20 files (cygwin.tmpl, cygwin.rules ... in X11R6.4/lib/X11/config) being = somewhat=20 out-of-date, but these have been solved.=20

The problem comes with the attempt to produce a 'shared library' = (DLL on=20 Cygwin of course).  The Imakefile uses the imake rule=20 SharedLibraryTarget(...):
--------------------------- =
#define=20 = SharedLibraryTarget(libname,rev,solist,down,up)    &n= bsp;           =20 @@\=20 =
AllTarget(Concat3(lib,libname,.dll))     = ;            =             &= nbsp;     =20 @@\
         = @@\=20 =
CppFileTarget(libname.def,libname-def.cpp,-DLIBRARY_VERSION=3Drev= ,$(ICONFIGFILES))=20 @@\
---------------------------=20

which produces the following make rules:=20

---------------------------
service.def::  = service-def.cpp=20 $(ICONFIGFILES)
 $(RM) $@ =
 $(CPP) =20 -DLIBRARY_VERSION=3D1 <service-def.cpp | sed -e '/^#  = *[0-9][0-9]* =20 *.*$$/d' -e\ '/^XCOMM$$/s//#/' -e '/^XCOMM[^a-zA-Z0-9_]/s/^XCOMM/#/'=20 >$@=20

clean::
 $(RM) service.def=20

junk.c:
 echo "#include=20 <cygwin/cygwin_dll.h>"  >junk.c
 echo=20 "DECLARE_CYGWIN_DLL(dll_main);"  >>junk.c =
 echo=20 "int WINAPI dll_main(HANDLE a, DWORD reason, void *q)" = >>junk.c=20
 echo "{ return 1; }"    = >>junk.c=20
libservice.dll: $(OBJS) junk.o service.def =
 $(RM)=20 libservice.a
 $(RM) libservice.dll=20

 if [ -f $(BASE_COUNTER) ]; then true; \ =
 else=20 echo 0x67000000 > $(BASE_COUNTER); fi
 dllwrap -s = --def=20 service.def --output-lib libservice.a -o libservice.dll $(OBJS) junk.o = $(REQUIREDLIBS) -image-base `cat $(BASE_COUNTER)`=20
 IMAGE_LENGTH=3D`objdump -x libservice.dll |awk = '/SizeOfImage/=20 {print "0x"$$2}'`; \
 export IMAGE_LENGTH=3D`expr = '(' \`printf=20 %u $$IMAGE_LENGTH\` / 65536 + 1 ')' '*' 65536` ; \ =
 export=20 IMAGE_BASE=3D`cat $(BASE_COUNTER)`; \
 printf 0x%x = `expr=20 \`printf %u $$IMAGE_BASE\` + $$IMAGE_LENGTH` > $(BASE_COUNTER) =
 $(_NULLCMD_)
----------------------------=20

The problem is that I don't have any service-def.cpp, and I don't = know the=20 correct format for it.=20

When I write my own 'service.def' and exclude the 'service.def' = rule from=20 the makefile, it fails with:
dlltool: unrecognized option=20 `--exclude-symbol=3D_cygwin_dll_entry AT 12'=20

My dllwrap is version 0.2.4 and dlltool 2.9.4.=20

When I copy the 'dllwrap' line to the command line it runs without = error=20 (surprisingly), but the nm says 'No symbols in "libservice.dll"'.=20

Has anyone been though this sort of thing before?=20

------=_NextPart_000_002A_01BEE97A.7F6B1A40--