This is the mail archive of the cygwin@sourceware.cygnus.com mailing list for the Cygwin project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
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,$(ICONFIGFILES))
@@\
---------------------------
which produces the following make rules:
---------------------------
service.def:: service-def.cpp $(ICONFIGFILES)
$(RM) $@
$(CPP) -DLIBRARY_VERSION=1 <service-def.cpp | sed
-e '/^# *[0-9][0-9]* *.*$$/d' -e\ '/^XCOMM$$/s//#/' -e '/^XCOMM[^a-zA-Z0-9_]/s/^XCOMM/#/'
>$@
clean::
$(RM) service.def
junk.c:
echo "#include <cygwin/cygwin_dll.h>" >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@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?
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |