On 17-Aug-09, at 1:30 AM, peter lo wrote:
Dear all, I am new to Gambit-C. I keep hearing that with Gambit-C, it is easy to create small executable. But when I tried, a simple hello world program takes around 3 MB when compiled as a STANDALONE executable. Is there a way to create small executable which includes only used functions, just like in C, we don't link the whole library into the executable.
Thanks.
Peter
It depends what you mean by a "standalone" executable. Do you include the shared libraries in the program's size? Do you include the operating system, which implements the low-level side of the libraries?
I assume you are interested in how much space is required on the file system to store the executable. Here's a simple experiment on Mac OS X of compiling a hello-world program in Scheme and C. Gambit is setup to use shared libraries, which is fair since that's what the C compiler normally does when it compiles and links a C program.
% cd gambc-v4_5_1-devel % ./configure --enable-shared --enable-single-host --prefix=/Users/ feeley/g % make % make install % cat hello-world.scm (println "Hello World") % ~/g/bin/gsc -exe hello-world.scm % ./hello-world Hello World % otool -L hello-world hello-world: /Users/feeley/g/lib/libgambc.dylib (compatibility version 0.0.0, current version 0.0.0) /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4) % ls -l hello-world /Users/feeley/g/lib/libgambc.dylib /usr/lib/ libgcc_s.1.dylib /usr/lib/libSystem.B.dylib -rw-r--r-- 1 feeley feeley 4316808 Aug 17 16:39 /Users/feeley/g/lib/ libgambc.dylib -r-xr-xr-x 1 root wheel 7895472 Apr 1 01:45 /usr/lib/ libSystem.B.dylib -rw-r--r-- 1 root wheel 264016 Oct 6 2007 /usr/lib/libgcc_s. 1.dylib -rwxr-xr-x 1 feeley feeley 13124 Aug 17 16:47 hello-world % gcc -shared hello-world.c % otool -L a.out a.out: /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4) % ls -l a.out /usr/lib/libgcc_s.1.dylib /usr/lib/libSystem.B.dylib -r-xr-xr-x 1 root wheel 7895472 Apr 1 01:45 /usr/lib/ libSystem.B.dylib -rw-r--r-- 1 root wheel 264016 Oct 6 2007 /usr/lib/libgcc_s. 1.dylib -rwxr-xr-x 1 feeley feeley 12588 Aug 17 16:49 a.out
So the actual executables (hello-world and a.out) are almost the same size on the file system. They both use some of the system's shared libraries, in particular libSystem.B.dylib which is almost 8MB. The Gambit program also links with Gambit's runtime library, libgambc.dylib, which is 4MB. So even if you include the shared libraries in the program's "size", both programs are reasonably similar in size (8MB vs 12MB).
Marc