How to create a static build

Gregor Richards Richards at codu.org
Wed Nov 7 07:20:34 PST 2007


Steven Schveighoffer wrote:
> "mandel" wrote
>> Steven Schveighoffer Wrote:
>>
>>> "mandel" wrote
>>>> Hi,
>>>>
>>>> I like to know how I can make a static build.
>>>> I can't get my program binaries to run on other linux
>>>> systems because some shared libs are missing.
>>> You could use -static on the link line.  If you are using dmd, just copy 
>>> the
>>> link line it outputs to gcc and add the -static argument.
>>>
>>> However, I don't recommend using this.  I have heard there are problems 
>>> with
>>> statically linking against glibc, and the maintainers say they aren't 
>>> going
>>> to fix it because nobody should be using static linking anymore...
>>>
>>> -Steve
>>>
>> glibc..ok. But what about other libraries like zlib?
>> The issue is that I get error messages like
>> "./main: /usr/lib/libz.so.1: no version information available (required by 
>> ./main)"
>> the program get mostly killed after that.
>>
> 
> Ah.  So you don't care if the binary is static or not, but you want to link 
> statically against a library?  that's easy.
> 
> Most libraries have two forms on linux, a .so form, and a .a form.  To link 
> specifically against the .a form, you have to specify the library file on 
> the command line:
> 
> gcc .... -lz
> becomes:
> gcc .... /usr/lib/libz.a
> 
> This should do the trick.
> 
> -Steve 
> 
> 

The more-reliable but also more-GNU-specific version of this, if anybody 
cares, is:
gcc -Wl,-Bstatic,-lz,-Bdynamic

This will work regardless of what path libz is in, but will not work 
with linkers other than GNU ld.

  - Gregor Richards



More information about the Digitalmars-d mailing list