how to make D program footprint smaller ?
dangbinghoo
dangbinghoo at gmail.com
Fri Jul 9 03:07:04 UTC 2021
On Friday, 9 July 2021 at 01:51:55 UTC, dangbinghoo wrote:
> On Thursday, 8 July 2021 at 11:18:26 UTC, russhy wrote:
>> On Thursday, 8 July 2021 at 10:01:33 UTC, dangbinghoo wrote:
>>> I have tried to add
>>>
>>> ```
>>> "dflags": ["--link-defaultlib-shared"],
>>> "lflags": ["--as-needed"],
>>> ```
>>>
>>> to dub.json, and my compiler is ldc2, with 800 loc program
>>> used `hibernated` and `asdf` package. it compiled to 27MB
>>> binary not stripped and even 4MB size after stripped. (When
>>> compiled to ARM, the binary is 3.6MB which is a little bit
>>> smaller, but link flags won't opt. this either!)
>>>
>>> I tried the link flags above, but it seems that the stripped
>>> binary is in some size.
>>>
>>> any suggestions for optimizing this?
>>>
>>>
>>> thanks!
>>> ---
>>> dbh
>>
>> try:
>>
>> ```
>> "dflags-ldc": [
>> "-linkonce-templates",
>> "--Oz"
>> ],
>> ```
>>
>> but yeah
>> Are you using lot of templates in your code? buffer as global?
>>
>> my 20k LOC game's exe is only just 1.46mb (on windows), but
>> that's because i don't use std at all
>
> thanks for your suggestion. I just tried that flags but it
> seems not working for me.
>
> and I just use the `nm` tool with `x86_64-pc-linux-gnu-gcc-nm
> --size-sort myprg` to get all symbols in the binary, it showed
> up that. the executable linked with tons of vibe.d symbols.
>
> the situation is that: my program relies on another source
> library which depends on vibe.d, the problem is that the source
> library is just a set of various tools, my program is using a
> little sub of that library, which has nothing imported with
> vibe.d.
>
> BUT: the final program compiled with dub seems simply linked
> all symbols of the sourcelibrary to the executable.
>
> So, it there any flags that opt. this like gcc? just to link
> only needed symbols?
>
> thanks!
>
> dbh.
I tried to delete the dependency of `vibe.d` and `hibernated`
package(just an experiment, I finally need them in other
process-executables). it shows up that deleting `vibe.d`
decreases the size to 1.8MB (stripped) and deleting `vibe.d` and
`hibernated` result-in a size of only 530KB(stripped), this is
the size it should be.
I don't know this is related to dub or LDC itself, but obviously,
THIS IS A REAL PROBLEM about D compiling.
as questioned in the previous thread, I need to find out
something like `--as-needed` options available for D.
thanks!
More information about the Digitalmars-d-learn
mailing list