File size and smartlinking/zh CN

From Lazarus wiki

Deutsch (de) English (en) français (fr) 日本語 (ja) português (pt) 中文(中国大陆)‎ (zh_CN)

本条目是关于Lazarus上的可执行文件体积优化和智能链接(This article is a work in progress about executable size and smartlinking on Lazarus.) Feel free to contribute.


在Free Pascal中,“智能链接” 是指从最终可执行程序中删除没用到的代码和变量。这是在链接阶段完成的,当可执行文件由编译器早些时候创建的目标文件创建时。 In Free Pascal, "smartlinking" is removing unused code and variables from the final executable. This is done during the linking stage, when the executable is written using the object files created by the compiler earlier.

Case study 1 in Windows

This study was conducted on the 8th of February 2006 because a Lazarus fully compiled with Smartlinking was Released (version 0.9.12). It intends to establish the relationship between the varying results below with different Lazarus and Free Pascal versions as well as with Smartlinking and without.

The Variables being studied are:

  • Executable size after strip
  • Executable size after strip and UPX
  • Linking time

Compile time isn´t considered here because it´s too similar on all configurations and much less significant than the link time.

Executable size without strip isn´t included. Notice that strip was used always from command line with the command:

strip --strip-all magnifier.exe

The program being compiled is the Virtual Magnifying Glass. The source and binaries for this program are freely available for download on:

About the linking time please note that the utilized computer is 3.2GHz Pentium 4 with Intel motherboard and dual core processor and 512MB of RAM.


The utilized OS is Windows XP and the 0.9.13 versions are from the same date when 0.9.12 was release. The comparison took place using the following software configurations:

  • Lazarus 0.9.12 available here. Free Pascal 2.0.2 that comes with the installer. LCL and RTL are smartlinked. Refered from now on as simply 0.9.12.
  • Lazarus 0.9.13 downloaded from Subversion from the same date. Free Pascal 2.0.2 installed separately. The LCL is not smartlinked. Refered from now on as simply 0.9.13 + 2.0.2.
  • Lazarus 0.9.13 snapshot. Free Pascal 2.1 that comes with the installer. The LCL is not smartlinked. Refered from now on as simply 0.9.13 + 2.1.
  • Lazarus 0.9.13 snapshot. Free Pascal 2.1 that comes with the installer. The LCL is smartlinked. Refered from now on as simply 0.9.13 + 2.1 + SL.
0.9.12 0.9.13 + 2.0.2 0.9.13 + 2.1 + SL 0.9.13 + 2.1
File Size after strip (in bytes) 1108480 1587712 1425408 1649152
File Size after UPX (in bytes) 318976 438272 388608 454144
Linking time 15 seconds 5 seconds 45 seconds 10 seconds


The 0.9.13 snapshot from the 8th of February 2006 features a unstable compiler from the 2.1 branch, which can cause the bigger executables and slower linking time as compared to the other versions.

The 0.9.12 version has the best file size of all, both with UPX and without, showing that Smartlinking really can diminish the file size in Windows. This, however, does not come without a cost, and the cost is linking time, which is about 3 times higher then without smartlinking.

The 0.9.12 version already comes fully configured for Smartlinking on Windows and no extra configuration is needed. This was not the case on previous releases.

See Also

  • Guide for anyone inexperienced in getting FPC and Lazarus to work properly.