This is the mail archive of the cygwin 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]
Other format: [Raw text]

Re: help with dynamic linkage?


On Sat, 11 Feb 2006, skaller wrote:

> hi, I'm having some problem getting dynamic linkage to work.
> The linkage model is like this:
>
> mainline <----- load time ---- librtl.dll
> ^                               /
>  \                             /
> dlopen                        /
>    \                         /
>   user.dll <-----------------
>
> gdb indicates the code is crashing in dlopen. LoadLibrary
> doesn't appear to work either :)
>
> All the code is C++. It works on Linux, it works with
> the option -mnocygwin, and it works with MSVC++.

You mean "-mno-cygwin", right?

> It *used* to work with Cygwin. The problem is almost
> certainly just using the wrong linker switches.

It would help if you told us what linker switches you're using.  In fact,
a small example program, buildable with a makefile into two DLLs and a
main application, would be even more helpful.

> The linkage technique is to follow Linux: no export libraries
> are built, build time linkage is done directly against the
> dll. This works fine for a simple C program.
>
> In order to build according to the above model,
> there are 3 compilation steps, and 3 linkage steps.
> However, the crash is unrelated to building the user.dll,
> since it occurs whenever mainline calls dlopen, even with
> a garbage name.

Then wouldn't you be able to reproduce it with only one DLL and one main
application?  Can we see a small complete example that shows the problem?

> I have cygwin installed on 2 comps and get the same result.
>
> I have tried two methods: generate and link against export file
> librtl.dll.a, and just linkagainst librtl.dll. Both methods
> fail. Warnings like:
>
> Info: resolving vtable for XXXby linking to __imp__XXX (auto-import)
>
> occur when linking the executable.

Those are informational.  You can either ignore them, or give the
"-Wl,--enable-auto-import" flag to the linker to quiet them.

> Switches: -O3 -fomit-frame-pointer --inline
>
> Hosts:
> * AMD64 running XP pro SP1
> * AMD64x2 running XP64
>
> Cygwin: latest setup provides.

Umm, setup can provide quite a few versions ranging from ancient to
latest, depending on your mirror.  Why not follow the guidelines at
<http://cygwin.com/problems.html> and attach (as an uncompressed text
attachment) the output of "cygcheck -svr"?

> Any hints what is causing the problem or how to fix it?

Not until we have enough information to allow us to reproduce the problem.
FWIW, I was unable to reproduce this with a trivial instance of your
scheme above and default linker options.  One quick question: how are you
invoking functions from user.dll, are you getting the right function
pointer, and are you taking care of C++ name mangling when loading symbols
from the DLL?
	Igor
-- 
				http://cs.nyu.edu/~pechtcha/
      |\      _,,,---,,_	    pechtcha@cs.nyu.edu | igor@watson.ibm.com
ZZZzz /,`.-'`'    -.  ;-;;,_		Igor Peshansky, Ph.D. (name changed!)
     |,4-  ) )-,_. ,\ (  `'-'		old name: Igor Pechtchanski
    '---''(_/--'  `-'\_) fL	a.k.a JaguaR-R-R-r-r-r-.-.-.  Meow!

"Las! je suis sot... -Mais non, tu ne l'es pas, puisque tu t'en rends compte."
"But no -- you are no fool; you call yourself a fool, there's proof enough in
that!" -- Rostand, "Cyrano de Bergerac"

--
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/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]