Whether it is possible to produce PURELY statically linked program in D , just like C++
deeproot
deeprootdeeproot at gmail.com
Thu Sep 13 02:26:00 PDT 2012
For C++
$ cat hello.cpp
#include <iostream>
using namespace std;
int main() {
cout << "hello";
return 0;
}
$ g++ hello.cpp -o hello
$ ldd hello
linux-gate.so.1 => (0xb7703000)
libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6
(0xb7607000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb7462000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb7435000)
/lib/ld-linux.so.2 (0xb7704000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb7417000)
Now i am trying to produce static executable in C++
$ g++ -static hello.cpp -o hello
$ ldd hello
not a dynamic executable
==================================
Now For D:
hello world D program has multiple dependencies
$ cat hello.d
import std.stdio;
void main(){writefln("%s World!", "Hello");}
$ gdc hello.d
$ ldd a.out
linux-gate.so.1 => (0xb771a000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb76d7000)
librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xb76ce000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb76af000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0
(0xb7694000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb74ef000)
/lib/ld-linux.so.2 (0xb771b000)
===========
Now, when i compile with -static flag to gdc then i get following
warnings
$ gdc -static hello.d
/usr/lib/gcc/i686-linux-gnu/4.6/libgphobos2.a(path.o): In
function
`_D3std4path11expandTildeFAyaZAya18expandFromDatabaseFAyaZAya':
(.text+0x335): warning: Using 'getpwnam_r' in statically linked
applications requires at runtime the shared libraries from the
glibc version used for linking
/usr/lib/gcc/i686-linux-gnu/4.6/libgphobos2.a(stdio.o): In
function `_D3std5stdio11openNetworkFAyatZS3std5stdio4File':
(.text+0x3d35): warning: Using 'gethostbyname' in statically
linked applications requires at runtime the shared libraries from
the glibc version used for linking
There is no reason that my just dead simple hello world program
should be linked with getpwnam_r and gethostbyname
========
in the same way, dmd compiler produced executable also is
dynamically linked only.
Now, my question is that, whether like C/C++ i can actually get a
helloworld (that no complex dependencies) program FULLY
statically linked in D.
More information about the Digitalmars-d
mailing list