Mail Archives: cygwin-apps/2001/11/07/15:26:21
Corinna Vinschen wrote:
>
> On Wed, Nov 07, 2001 at 10:56:00AM -0500, Charles Wilson wrote:
> > Corinna Vinschen wrote:
> >
> >
> > >>Except that the cygwin1.dll/libcygwin.a that you are linking against does
> > >>not have the requisite auto-import support thunks (_nm__*). Perhaps this
> > >>cygwin was compiled using a (very) old binutils? pre-20010802 ?
> > >>
> > >
> > > Yes. It has been cross-compiled on a Linux box. The binutils are...
> > > uhm... compiled on 2001-07-12 so they are definitely pre-20010802.
> > > Somehow I don't understand how that stuff is supposed to work. I'm
> > > not a binutils expert...
> >
> >
> > Okay, then I'm gonna assume that you are linking against a kernel that you
> > built yourself, and not the "official" cygwin kernel that cgf built
> > (otherwise, the following applies to him):
> >
> > You ought rebuild your cross-binutils from the binutils-20011002-1-src as
> > distributed from the cygwin mirrors.
> >
> > Recent binutils (post-20010802) add special autoimport-support thunks to
> > the dll's that they create. These are used to create a lookup table for
> > the variable exports, by fooling the windows runtime loader. (I don't
> > understand the whole thing, but it's a neat concept.)
> >
> > Anyway, the *DLL* as well as your client app need to be built using a
> > recent binutils, in order for the auto-import thing to work properly.
>
> Thanks, that helped. I have build and installed binutils-20011002-1
> for cross-building cygwin binaries on my Linux box. Now the message
>
> Warning: resolving ___progname by linking to __imp____progname (auto-import)
>
> is written to stderr and the link stage is successfully completed.
>
> > Of course, with the cygwin1.dll, auto-import shouldn't be necessary.
> > __progname *ought* to be declared (with appropriate __declspec() markings)
> > in some header file somewhere, so that's a cygwin bug.
>
> Which is kinda mess since there's even no header on Linux which
> defines __progname. Is there _any_ standard on where to define
> __progname?
Hmm...it looks like __progname is a BSDism -- and I saw stuff where THEY
were complaining that it wasn't declared in system headers. Apparently,
the "standard" is to declare "extern char * __progname" in your own code
-- which makes portable __declspec'ing difficult, unless we do something
ugly like:
#ifdef CYGWIN
extern __declspec(dllimport) char * __progname;
#else
extern char * __progname;
#fi
in all client code that wants __progname. Or, just make sure folks use
new compilers and live with the "warning" about auto-import.
--Chuck
- Raw text -