On Tue, Apr 7, 2009 at 5:13 PM, Marc Weustink <m...@dommelstein.net> wrote: > > 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.
Since I started using Lazarus (4+ years ago), I have only two had a checksum issue compiling lazarus. A simple 'make clean' and then recompile resolved the problem. But I actually think the issue was caused due to a FPC upgrade - I can't remember exactly, but am pretty sure. > To avoid this and to make the LCL usabole as "library", most unit circles > were removed. One way to ensure that is by putting all uses in the > interface section. OK I'm confused. How does solving circular reference get resolved by putting everything in the Interface section? Doing that is what causes circular reference problems?? Maybe I understand circular reference problems differently to you... this is what I mean: ==================== { this defines TClass1 } unit Unit1; uses unit2; type TClass1 = class(TObject) private FRef: TClass2; end; .... ==================== { this defines TClass2 } unit Unit2; uses unit1; type TClass2 = class(TObject) private FRef: TClass1; end; .... ============================= Both classes require each other and can't be compiled. This is what I understand as circular unit references. To solve this you can lump both class definitions in a single unit and add a 'forward declaration' at the top. >> 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. > > 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. OK, I worded that wrong. For smartlinking there shouldn't be any difference if the unit is in the Interface or Implementation section. What is important is if the unit is used or not. I think the reason I can get such small executables, is because every gui component lives in it's own unit. fpGUI doesn't have a StdCtrls or ComCtrls unit which lumps a whole bunch of classes together. And when I create applications I only add the units I really need. This is obviously key. Regards, - Graeme - _______________________________________________ fpGUI - a cross-platform Free Pascal GUI toolkit http://opensoft.homeip.net/fpgui/ _______________________________________________ Lazarus mailing list Lazarus@lazarus.freepascal.org http://www.lazarus.freepascal.org/mailman/listinfo/lazarus