Lazarus does something strange when it compiles, I avoid using it for compiling non-LCL applications. For my projects I write a special .sh/.bat script and tell Lazarus run it instead of calling the compiler directly. This gives quite different results, most notable is smaller executables. While compiling directly from Lazarus often creates executables that just won't run.

Lazarus is a handy thing and I'm glad it's here, but it still weird.

but also C mem management functions like malloc/free/calloc etc.
Aha. Then it probably works for me because my program links libc due to using the libc unit (required for determining RAM size).

Try adding uses libc to your units and see if the memory management functions are there. I suspect both libc and libstdc++ have these functions.

This what I got from Visual Dependency walker on my executable.
Code:
 libcrypt.so.1 /lib
   libc.so.6   /lib
     ld-linux.so.2     /lib
 libc.so.6 /lib
   ld-linux.so.2   /lib
 libdl.so.2 /lib
   ld-linux.so.2   /lib
   libc.so.6   /lib
     ld-linux.so.2     /lib
 libpthread.so.0 /lib
   ld-linux.so.2   /lib
   libc.so.6   /lib
     ld-linux.so.2     /lib
 librt.so.1 /lib
   ld-linux.so.2   /lib
   libc.so.6   /lib
     ld-linux.so.2     /lib
   libpthread.so.0   /lib
     ld-linux.so.2     /lib
     libc.so.6     /lib
       ld-linux.so.2       /lib
 libX11.so.6 /usr/lib
   libc.so.6   /lib
     ld-linux.so.2     /lib
   libdl.so.2   /lib
     ld-linux.so.2     /lib
     libc.so.6     /lib
       ld-linux.so.2       /lib
   libxcb.so.1   /usr/lib
     libc.so.6     /lib
       ld-linux.so.2       /lib
     libXau.so.6     /usr/lib
       libc.so.6       /lib
         ld-linux.so.2         /lib
     libXdmcp.so.6     /usr/lib
       libc.so.6       /lib
         ld-linux.so.2         /lib
   libxcb-xlib.so.0   /usr/lib
     libc.so.6     /lib
       ld-linux.so.2       /lib
     libxcb.so.1     /usr/lib
       libc.so.6       /lib
         ld-linux.so.2         /lib
       libXau.so.6       /usr/lib
         libc.so.6         /lib
           ld-linux.so.2           /lib
       libXdmcp.so.6       /usr/lib
         libc.so.6         /lib
           ld-linux.so.2           /lib
P.S. It still crashes spectacularly when I try to load a progressive JPEG file, allocating more than a gigabyte of RAM, pushing everything to swap, etc. No matter if I use {$DEFINE IMJPEGLIB} or {$DEFINE PASJPEG}