Bug in gcc and/or binutils?

Gerrit P. Haase gerrit@familiehaase.de
Fri Sep 16 14:02:00 GMT 2005


Danny Smith wrote:

> References: <http://sources.redhat.com/ml/cygwin/2005-09/msg00471.html>
> <http://sources.redhat.com/ml/cygwin/2005-09/msg00519.html>
> 
> Charles Wilson <cygwin at cwilson dot fastmail dot fm>  wrote:
> 
> 
>>Using .def files turns off the auto-EXport logic (which it should,
>>because if you specify a specific set of exports you don't want binutils
>>adding a few more on its own).
> 
> 
> There seems to be a common misconception that auto-export logic and
> explicit designation of exports are incompatible.
> You can still use --export-all  (to get the auto-export of all defined
> symbols) with a .def file or with __declspec(dllexport).
> 
> eg
> gcc -shared -ofoo.dll foo.def foo.c -Wl,--export-all

But this does not help in the test case.  The import libs are identical 
in regard to the symbol, with or without export-all flag, the executable
linked with this import lib is broken.


> The use of a def file (with --export-all) is useful when you want to
> export all symbols but want special handling of some, say an alias or
> marking a symbol as PRIVATE (exclude from import lib) or NONAME (exclude
> the name of the symbol from the dll's export table), (almost like
> __attribute__((hidden)) Or you may want to add a symbol that is just
> forwarded to another dll. Or you have a function foo() but only want
> the indirect ref __imp__foo visible in the import lib, and not the label:
> 
> foo:
>   jmp * __imp__foo
> 
> so you only export the pointer  by marking as DATA in the def file

So if you want export the pointer and use a .def file you must mark it
as DATA, else it will not be exported. Though it is not exactly the
problem, directly linking to the DLL succeeds with or without (wrong)
.def file.


Gerrit
-- 
=^..^=

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



More information about the Cygwin mailing list