Jonas Maebe wrote:
  procedure proc; external 'libname' name 'proc';
denotes a function that's dynamically loaded implicitly, while
  procedure proc; external name 'proc';
denotes a static linked function.

In my opinion that seems like the only logical solution. Explicit dynamic loading will ofcourse still be possible, but you wouldn't need tools or lots of ifdefs

I'm not aware of how well it would work on Mac platforms, but I'm mostly certain most GNU/Linux and BSD's, and Windows has support for implicit dynamic linking in the executable formats
What about saying that

What do you mean by "implicit dynamic linking"?
Using a runtime linker. On windows implicit dynamic loaded functions are written in the .idata section. And using dynamic runtime linking on GNU/Linux, with dl
This is ofcourse a solution that would require modification of the compiler, but I think in the long run that it'll make alot of things more comprehensible

It would also require modifications to several existing header translations, and depending on what "implicit dynamic linking" means, it would also make it impossible to use the same unit for static and for dynamic linking, while this is currently possible. It would also break backwards compatibility. And like Marco I'm not sure what the big problem is that is solved with this.
If this method was implemented we could make both methods possible like this

{$ifdef LINKSTATIC}
const
 libname := '';
{$ifdef LINUX}
 {$l library}
{$endif}
{$ifdef WIN32}
 {$l library}
{$endif}
{$else}
const
{$ifdef LINUX}
 libname := 'library.so';
{$endif}
{$ifdef WIN32}
 libname := 'library.dll';
{$endif}
{$endif}

procedure ImportedFunction; external libname name 'ImportedFunction';
procedure ImportedFunction2; external libname name 'ImportedFunction2';

I hope I get the point across :)
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to