How to handle variables (data, etc.) in DLLs?

T J Harding tjh@quadstone.com
Wed Mar 3 06:07:00 GMT 1999


Hi

I was porting something to Cygwin and all was going swimmingly, until I
ran into problems building a DLL from object code with global data
symbols (i.e.
nm shows these symbols as type D or C).

Just to make it clearer, a trivial example:

main.c might contain:

extern int foo;
extern void bar(void);
int main ( int argc, char **argv )
{
  foo++;
  bar();
}

and foo.c might contain:

int foo=0;
void bar(void)
{
  foo--;
}

It is foo.o that I want to include in a DLL.

I was using dllwrap 0.2.4 (and dlltool 2.9.4) with b20.1 (95 and NT).
"dllwrap --export-all-symbols" exports the data symbols to the .def
file, but
they seem to be exported as if they were functions, resulting in a core
dump
when a.exe is run.  I've tried putting "DATA" after the symbol name in
the
.def file, which results in the symbol being undefined in the import-lib
libfoo.a, meaning I have to link foo.o in as well as libfoo.a.

So how should one best deal with this situation?  It's not my code, so I
don't 
want to have to alter it significantly just to port it.

Tim
begin:vcard 
n:Harding;Tim
tel;cell:+44 961 444986
tel;fax:+44 131 220 4492
tel;work:+44 131 220 4491
x-mozilla-html:TRUE
url:www.quadstone.com
org:Quadstone
adr:;;16 Chester Street;Edinburgh;Scotland;EH3 7RA;United Kingdom
version:2.1
email;internet:tjh@quadstone.com
title:Decisionhouse Services
x-mozilla-cpt:;-1080
fn:Tim Harding
end:vcard



More information about the Cygwin mailing list