[Lazarus] Large program size - 1.8 MB for empty GUI project

Mattias Gaertner nc-gaertnma at netcologne.de
Tue Apr 7 23:15:31 CEST 2009


On Tue, 07 Apr 2009 17:32:58 +0200
Bogusław Brandys <brandys at o2.pl> wrote:

> Marc Weustink wrote:
> > Graeme Geldenhuys wrote:
> >> 2009/4/7 Mattias Gärtner <nc-gaertnma at netcologne.de>:
> >>> Uses sections in implementation sections are buggy as long as I
> >>> know fpc. The problems are known but apparently too hard to track
> >>> and fix. The bugs appear at random and with various degrees
> >>> depending on platform and fpc version. In some years you think
> >>> the bugs are fixed, and then they come back. You have been
> >>> warned: Don't use the imp sections.
> >>>
> >>> I thought this was known:
> >>> http://wiki.lazarus.freepascal.org/DesignGuidelines
> >> This is the first I here of this. I was always taught to limit the
> >> usage of the Interface section's uses clause, so you can prevent
> >> circular unit issues. So is FPC the opposite of Delphi in this
> >> regards?
> > 
> > No, but the problem is caused by the way fpc stores info in the .ppu
> > Somehow it is possible that the checksum of the interface part
> > stored in the .ppu is affected by the implementation section.
> > When editing sources this can lead to strange results, the compiler 
> > might think in some cases an interface is changed or not.
> > When Lazarus started we put a lot in the uses section of the 
> > implementation part. When some source was changed, sometimes a 3 or 
> > fourtime compile attempt was needed to compile the while LCL, since 
> > everytime the compiler thought a unit was changed whil it was not. 
> > Restarting compilation (and keeping the existing units) in most
> > cases resulted in a compiled LCL.
> > To avoid this and to make the LCL usabole as "library", most unit
> > cirles were removed. One way to ensure that is by putting all uses
> > in the interface section.
> > 
> >> I have used FPC since 2.0.2 under Linux and Windows and haven't had
> >> any issues. I limit the usage of interface uses clause as much as
> >> possible. I believed that is why the smartlinking works so well
> >> with fpGUI - I can create a GUI application that is only 340KB in
> >> size.
> > 
> > It might depend on how you compile fpGUI.
> > 
> > Anyway, back to the subject, I cannot imagine why FPC when
> > smartlinking makes a difference between interface and
> > implementation uses. Especially if you use an external linker, like
> > on linux.
> > 
> > Marc
> > 
> 
> Doesn't it require anyway recompilation of all lcl units with -CX
> option (smart linkable) ?
> 
> Btw a little different question : what is needed to allow lineinfo 
> reading stack trace from external file (in case of exception) for 
> example of the name corresponding to exe name but with different 
> extension. FPC can now dump debug info into such separate file. Such 
> feature would be very useful as compilation option for example.

Write a lineinfo unit that supports the external file.

Mattias




More information about the Lazarus mailing list