Mailing-List: contact cygwin-help@cygwin.com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe@cygwin.com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin@cygwin.com>
List-Help: <mailto:cygwin-help@cygwin.com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner@cygwin.com
Mail-Followup-To: cygwin@cygwin.com
Delivered-To: mailing list cygwin@cygwin.com
Message-ID: <dcb6291805092612592de84c2b@mail.gmail.com>
Date: Mon, 26 Sep 2005 20:59:53 +0100
From: Nick Glencross <nick.glencross@gmail.com>
Reply-To: Nick Glencross <nick.glencross@gmail.com>
To: Max Bowsher <maxb@ukf.net>, cygwin@cygwin.com
Subject: Re: Visibility of compiler symbols between executables and DLLs
In-Reply-To: <279601c5c27a$cc315170$5304a8c0@chimaera>
MIME-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Disposition: inline
References: <dcb629180509260139f2440c1@mail.gmail.com> 	 <279601c5c27a$cc315170$5304a8c0@chimaera>
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from quoted-printable to 8bit by delorie.com id j8QK0RmR031419

Max,

Thanks, that's the conclusion that I had come to. On other UNIX-based
platforms it's possible without actually linking with the .exe,
provided you have compiled with the right flags (-shared on Linux, or
-E on HP-UX). With this done the .exe exposes its global symbols to
subsequently loaded libraries which can then import them. Looks like
DLLs are are more restrictive, but I couldn't find anything documented
about it for cygwin.

Thanks,

Nick

On 9/26/05, Max Bowsher <maxb@ukf.net> wrote:
> Nick Glencross wrote:
> > Guys,
> >
> > I've done some research on this and don't believe that it's a
> > perennial question that keeps coming up!
> >
> > On many platforms compilation symbols in an executable are not made
> > visible to its Shared Library/DLLs by default, but this can often be
> > overridden with a compiler flag to change the policy. My question in a
> > nutshell then is whether cygwin has the ability to have a DLL access a
> > global variable within the executable that loads it? As an obvious
> > follow on, if yes, then how do you go about doing it?
> >
> > Everything that I've seen indicates that this isn't possible, due to
> > limitations imposed by DLLs, but would appreciate believing this with
> > a bit more confidence,
>
> I'm fairly sure that it is impossible. Actually, it might be possible if
> there was a flag to convice GCC to add an import table to the built .exe,
> but last time I investigated that, there was no such flag. But even if that
> was possible, the .dll would need to explicitly link against the .exe that
> was to load it, for this method to work.
>
> The standard workaround is to put whatever symbols both the .exe and the
> .dll both need access to into a second .dll, which both of the original
> components then link against.
>
> Interestingly, the difficulties created by DLLs are at least slightly
> similar to those created by OS X two-level-namespace linking.
>
>
> Max.
>
>

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


