On Wednesday, 1 August 2018 at 15:58:53 UTC, Jacob Shtokolov
wrote:
On Tuesday, 31 July 2018 at 15:19:19 UTC, Dan Barbarito wrote:
Hi all,
I am starting to write a command line tool.
Hi!
First, Vibe.d will increase your binary size because it
contains a lot of unnecessary things inside it. So instead of
using the entire vibe.d library, you may point dub to specific
vibe.d parts, like `vibe.d:core`, `vibe.d:http` etc.
If you put the whole vibe.d framework as a dub dependency and
use it like `import vibe;` the things like mongodb drivers,
email libraries, redis driver etc. will be linked to your
binary as well, even if you don't need them.
Second, you need to compile your code in the release mode to
cut all debug information out of it. Also, you can try to use
the `strip` command line tool to cut all export symbols if your
binary is an executable file, not a library. This will reduce
the size. In some cases a lot.
The third thing is already mentioned: by default, the DMD
compiler builds and links the code statically. In other words,
your binary contains parts of the DRuntime and the Phobos
libraries (those parts that you've used in your program).
This thing helps to distribute compiled binaries without
external dependencies (except libc and libpthread), because
your binary is already contains all needed stuff.
If you're not happy with it, you can try to use the LDC
compiler, which uses the dynamic linking by default. Your
binary will be really tiny, but in order to execute it, you'll
need to have the libdruntime.so and libphobos.so installed in
your system. This may add additional issues if you plan to
distribute your program.
Sadly, we still don't have the D runtime libraries installed in
all popular OSes. Currently only the libc has this privilege 😀
I hope the situation will change in the future.
Hi, I was trying with ldc (source ~/dlang/ldc-1.17.0/activate)
and the size of binary is even worse
dub with dmd 2.89 MB
dub with ldc 3.50 MB
It is very simple program but use derelict-gl3 and derelict-sdl2
I want to link them all dynamically (I don't plan to distribute
binary any time soon)
What exactly should I specify to make it link dynamcially and
produce as small binary as possible (without increasing
compilation time) ?