RESOLVED: Using gcc to build a DLL discovered and linked at runtime

Jim Kleckner jek_subs@kleckner.net
Sat Jan 18 11:02:00 GMT 2003


Christopher Faylor wrote:

>On Fri, Jan 17, 2003 at 06:58:17AM -0800, Joshua Daniel Franklin wrote:
>
>>MIME-Version: 1.0
>>Content-Type: text/plain; charset=us-ascii
>>
>>References: <3E2753C9.4040008@kleckner.net>, <3E25A7EE.7050109@kleckner.net>
>>
>>>After carefully inspecting the symbols from
>>>generated dlls and dlls provided by TradeStation,
>>>I found that symbols occurred with and without the
>>>@decorations.  e.g. PPI@4 and PPI.
>>>
>>>Adding -Wl,--add-stdcall-alias to the gcc line,
>>>all worked fine.
>>>
>>>Could this generally be a requirement for dlls
>>>that are opened at runtime in a fashion similar to
>>>dlopen?  If so, then some FAQ annotation would be
>>>in order here:
>>>  http://www.cygwin.com/cygwin-ug-net/dll.html
>>>
>>I may be wrong (I'm not a GCC expert), but isn't that more
>>of a gcc thing than a cygwin thing? 
>>
>>I don't want to end up pasting the whole gcc manual into
>>the "Using DLLs" page. It's really only intended to be a quick
>>start for cygwin, not a comprehensive guide.
>>
>
>Right.  The --add-stdcall-alias option is also not something
>that you just nonchantly add to the command line.  It does not
>belong in a general guide, except, perhaps as a q.v.
>

I defer to your judgement here.  I would note that
it took me a lot of digging to come up with the
solution.  One small hint to others might save
them a boatload of time.  Something like:

  "When programs discover and open a dll at
  runtime be sure to check that the symbols are
  generated in the form expected by the program.
  Take a look at the documentation for ld about
  the --add-stdcall-alias and --kill-at options
  that control whether the 'ordinal number' is
  output as part of the symbol or not."
in this page: http://www.cygwin.com/cygwin-ug-net/dll.html

I didn't find any information on this question by
top-down inspection of the GCC manual which does
not give much discussion of Windows-specific
features.  Instead it refers readers to cygwin
where I suspect most seekers will travel.  A site
search of gcc.gnu.org yields nothing for
add-stdcall-alias or kill-at.  It appears that
only the binutils package documentation for ld and
dlltool mention it.  For completeness, the
suggestion for the binutils team would be to
augment the documentation about these options for
ld to include:

    `-k'
    `--kill-at'
         Specifies that when `dlltool' is creating the
         exports file it should not append the string
         `@ <number>'.  These numbers are called
         ordinal numbers and they represent another
         way of accessing the function in a DLL, other
         than by name.
  Append this text:
         When programs discover and open a dll at
         runtime be sure to check that the symbols
         are generated in the form with or without
         ordinals as expected by the program.  Try
         this option or the --add-stdcall-alias
         option if dynamic loading fails at runtime.

If some kind reader might forward this message to
the binutils team's list, I would be grateful as I
am not a member.

Thanks - Jim



--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Bug reporting:         http://cygwin.com/bugs.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/



More information about the Cygwin mailing list