Let's build small Qt libraries! (Step 2: Optimize build-settings)
-
bq. As you’re on Windows using MinGW (I know your project quite good now :-) ) you must add the respective mkspec:
./configure -platform win32-gcc ... your additional args go here ....Just making sure. So I need to attach the compiler-switches like -fmerge-all-constants already in the configure-step?
These are the Qt-dll's and their sizes my program currently needs:
@Uncompressed size | UPX -9 size | Name
2,43MB | 0,91MB | QTCore4.dll 2,92MB | 0,86MB | QTDeclarative4.dll 9,39MB | 3,69MB | QtGui4.dll 1,15MB | 0,40MB | QTNetwork4.dll 2,07MB | 0,65MB | QTScript4.dll 0,20MB | 0,10MB | QTSql4.dll 3,82MB | 0,94MB | QTXmlPatterns4.dll
21,98MB 7,55MB@
Especially QtGui4.dll should be reducable much further since I'm using exclusively QML (with Jens desktop-components) for the GUI.
-
So even qconfig won't help?
I could exclude some widgets in the sourcecode but that is a bit too much (imagine I need to do this for every new qt-version).strip <file> -s didn't really do much. Any other useful parameters?
What I am aiming for is a small download-size for users.
-
[quote author="Peppy" date="1305654867"]DLLs should get redesigned, this system is too old (from Windows 95, I think), but that's the work of Microsoft...[/quote]
Shared libraries (.so on unix/linux, .dylib on Macs) behave just the same way! They were intended to reduce the memory footprint (a shared library is loaded into memory only once and used by multiple programs), as well as disk space. Both are not so an issue anymore these days.
So, a Mac application bundle is "bloated" too, as would be a linux archive containing all necessary non-system libraries.
-
[quote author="Hedge" date="1305654933"]So even qconfig won't help?
I could exclude some widgets in the sourcecode but that is a bit too much (imagine I need to do this for every new qt-version).strip <file> -s didn't really do much. Any other useful parameters?
What I am aiming for is a small download-size for users.[/quote]
No, qconfig does not help. The DLLs will always contain all widgets.
strip regularly does not save very much space on binaries compiled in release mode already.
If you're only after a small download size, use a decent archiver and set it's mode to maximum compression.
[quote author="Hedge" date="1305655290"]Where do I use these flags?
I initially asked where I can apply the compiler-flags:
bq. -Os
-fmerge-all-constants
-fno-default-inline
-fno-inlineNeither configure nor mingw32-make accept them.[/quote]
These are compiler/linker flags, you can try to set them for configure this way:
@
CFLAGS="-Os -fmerge-all-constants -fno-default-inline -fno-inline"
./configure -platform win32-g++
your additional flags go here
@But be aware that fiddling with optimization settings (-Os) may make things worse or add a runtime slowdown penalty.
-
But they were designed about 20 years before, and probably they will change...
But back to the topic, I don't remember what it was...
I think: http://wiki.wxwidgets.org/Reducing_Executable_Size (--strip-all)
-
Thanks for clarifying that CFLAGS-thing. I'm currently writing my BA so I've got time to try some configurations (and also the MSVC-compiler).
I'll post the details here.
However I've a problem atm ...size-wise.
My application, although build in release-mode asks for the debug-DLLs as well (QtGui4d.dll etc.) when I try to execute it on another PC. Any ideas what would could've gone wrong?
The executables size is much smaller than in debug-mode (400kb vs. 2.4MB). -
There's already a thread "here":here http://developer.qt.nokia.com/forums/viewthread/6033/ regarding that question but no one had a good idea yet.
I threw it in b/c it didn't seem to be too off-topic (it's influencing the application-size in a very bad way). -
[quote author="Hedge" date="1305656526"]
However I've a problem atm ...size-wise.
My application, although build in release-mode asks for the debug-DLLs as well (QtGui4d.dll etc.) when I try to execute it on another PC. Any ideas what would could've gone wrong?
The executables size is much smaller than in debug-mode (400kb vs. 2.4MB).
[/quote]
if you're using UPX....
try delete pagefile.sys of your compiler's pc, than run your apps than something going haven...
sadly crash in previous trial... :( -
I've got some results to show off.
I can't run configure with the Microsoft-compiler ("Your text to link here...":http://developer.qt.nokia.com/forums/viewthread/6060/).
For now I built Qt with the following configure-options:
@Configure -L -release -platform win32-g++ -opensource -no-exceptions -no-stl -no-opengl -no-openvg -no-libjpeg -no-libtiff -no-dsp -no-vcproj -no-webkit -no-scripttools -no-native-gestures -qconfig ali@
I checked off as much stuff as possible in my custom config-file but especially didn't know which GUI-components I could remove (I use the qml-desktop-components).
The result is a lower size of around 1MB (6,51MB compared to 7,55MB before)
@default size | self-compiled(gcc) | UPX -9 | Name
2,43MB | 2,04MB | 0,80MB | QTCore4.dll 2,92MB | 2,23MB | 0,67MB | QTDeclarative4.dll 9,39MB | 7,75MB | 3,19MB | QtGui4.dll 1,15MB | 0,77MB | 0,28MB | QTNetwork4.dll 2,07MB | 1,74MB | 0,55MB | QTScript4.dll 0,20MB | 0,20MB | 0,08MB | QTSql4.dll 3,82MB | 3,82MB | 0,94MB | QTXmlPatterns4.dll (wasn't compiled)
21,98MB 18,55MB 6,51MB@
These were the old results:
@Uncompressed size | UPX -9 size | Name
2,43MB | 0,91MB | QTCore4.dll 2,92MB | 0,86MB | QTDeclarative4.dll 9,39MB | 3,69MB | QtGui4.dll 1,15MB | 0,40MB | QTNetwork4.dll 2,07MB | 0,65MB | QTScript4.dll 0,20MB | 0,10MB | QTSql4.dll 3,82MB | 0,94MB | QTXmlPatterns4.dll
21,98MB 7,55MB@
-
Now I've compiled using MSVC2010 and excluding just a bit stuff (-no-stl, -no-exceptions etc).
These are the new results:
The result is a lower size of around 0,71 MB compared to the GCC-built libraries.
I'm trying to compile with exceptions now so I can get XMLPatterns built.
@default size | self-compiled(MSVC)| UPX -9 | Name
2,43MB | 1,85MB | 0,82MB | QTCore4.dll 2,92MB | 1,71MB | 0,58MB | QTDeclarative4.dll 9,39MB | 6,57MB | 3,02MB | QtGui4.dll 1,15MB | 0,59MB | 0,24MB | QTNetwork4.dll 2,07MB | 1,05MB | 0,37MB | QTScript4.dll 0,20MB | 0,13MB | 0,07MB | QTSql4.dll 3,82MB | 2,52MB | 0,60MB | QTXmlPatterns4.dll
21,98MB 14,32MB 5,70MB@
These were the old results:
@Uncompressed size | UPX -9 size | Name
2,43MB | 0,91MB | QTCore4.dll 2,92MB | 0,86MB | QTDeclarative4.dll 9,39MB | 3,69MB | QtGui4.dll 1,15MB | 0,40MB | QTNetwork4.dll 2,07MB | 0,65MB | QTScript4.dll 0,20MB | 0,10MB | QTSql4.dll 3,82MB | 0,94MB | QTXmlPatterns4.dll
21,98MB 7,55MB@