Size of crosscompiled exectuable

Simon Marlow marlowsd at
Mon Jan 28 12:46:37 CET 2013

On 26/01/13 08:24, Nathan Hüsken wrote:
> On 01/25/2013 05:45 PM, Simon Marlow wrote:
>> On 25/01/13 16:35, Simon Marlow wrote:
>>> On 25/01/13 15:51, Stephen Paul Weber wrote:
>>>> Somebody claiming to be Simon Marlow wrote:
>>>>> On 25/01/13 13:58, Nathan Hüsken wrote:
>>>>>> A simple hello world application has 1Mb in by 64 bit ubunut machine.
>>>>>> When I stript it, is has about 750kb.
>>>>>> When I build a cross compiler for android (arm), the executable has a
>>>>>> asize of about 10MB, stripped about 5MB.
>>>>>> That is huge, five times the size on my linux sysem.
>>>>> Not sure what you mean by "five times the size on my linux system".
>>>>> What is 5 times larger than what?
>>>> He's saying that the size of the android executable (made by his cross
>>>> compiler) is five time the sive of the equivalent Ubuntu executable
>>>> (made by, I assume, his system's GHC).
> Yes, exactly. Sorry for my bad phrasing.
>>>> The problem is not the size, but the size ratio.
>>> Ah, I see.  Yes, my executables are a similar size.  I'm not sure why,
>>> I'll try to look into it.
>> It's just the lack of SPLIT_OBJS.  Also, unregisterised accounts for a
>> factor of 1.5 or so.
> What exactly does SPLIT_OBJS do? Is there a chance to get it working for
> cross platform?

SPLIT_OBJS turns on the -split-objs flag to GHC when building libraries, 
which makes it generate lots of little object files rather than one big 
object file for each module.  This means that when linking with a static 
library, we only link in the necessary functions, not the whole module tree.

I haven't tried it, but as far as I know SPLIT_OBJS should work when 
cross-compiling. There was a commit adding support for -split-objs with 
LLVM: 1f9ca81cff59ed6c0078437a992f40c13d2667c7


More information about the Glasgow-haskell-users mailing list