On Tue, 4 May 2004 08:34:55 -0400, Dan Sugalski wrote:

> Another todo list task for the interested. A perl & linker thing.
> 
> Right now, through the wonders of the Unix default linking 
> conventions, every function in parrot gets exported whether we want 
> them to be or not, and generally we don't. That needs fixing.
> 
> The right way to fix this is to have a file with the acceptable 
> exportable symbols and a fix to the link stage to convince the linker 
> that it should *only* export these symbols.
> 
> Shouldn't be tough--the linker's quite capable of doing this if 
> kicked hard enough, and the export list is actually required on a 
> number of systems.

Windows requires this export list, which is currently stored in the
"module-definition file" libparrot.def.  However, Windows provides a
"nicer" way of doing this, by prefixing a declaration with
__declspec(dllexport) someFunction
Windows then stores this information in the object file, and thereby
passing the inforation on to the linker.

So, here's my suggestion:

- Define something like PARROT_API to tag a symbol for export, eg
PARROT_API
Parrot_some_function

- Use "compiler magic" for every platform that supports it, eg for Windows
that would be
    #ifdef PARROT_EXPORTS
    #define PARROT_API __declspec(dllexport)
    #else
    #define PARROT_API __declspec(dllimport)
    #endif
(PARROT_EXPORTS need to be declared during compilation of libparrot, but
undefined during building against libparrot.)

- For those that don't have such an extension, extract the
PARROT_API
Parrot_some_function
declarations and store them in a suitable format for that platform.

Ron

Reply via email to