susundberg
susundberg

Reputation: 727

Why gcc does not support linking dynamical library into static binary

The background is following: there is 3'rd party provider that provides us with a libveryfancylib.so, in 32b. Softaware that uses the library has quite a load of other linux library dependencies (like QT) also, but they are open source, so no problem for statical linking. The target platform is 64b and running Debian 7.

We can ship the program with binary + dynamical libraries, no problem, but i would rather see single static binary with no dependencies.

So my question is: why i cannot link the dynamical library into static binary? I mean what bit of information is there missing, or is it just feature that is rarely needed -> not implemented.

Upvotes: 3

Views: 615

Answers (3)

Maxim Egorushkin
Maxim Egorushkin

Reputation: 136525

We can ship the program with binary + dynamical libraries, no problem, but i would rather see single static binary with no dependencies.

What is the problem you are trying to solve?

You can follow the model most commercial applications on Linux do: put your executable, shared libraries and other resources in one directory (possibly with subdirectories). When linking your executable against those shared libraries pass -Wl,-rpath,'$ORIGIN' (in make use -Wl,-rpath,'$$ORIGIN') to the linker, so that when starting your application the runtime linker looks for required shared libraries in the same directory where executable is.

Then archive that directory and give it to your users.

Upvotes: 1

Christoph
Christoph

Reputation: 169833

There are programs for MS Windows that can do so, eg DLL to Lib and DLL to Static Lib.

In the open source world, there isn't really much of an incentive to develop such a tool as you can always recompile from source (but of course it's possible that someone somewhere did it anyway).

Upvotes: 0

Some programmer dude
Some programmer dude

Reputation: 409482

It's because dynamic libraries and static libraries are two different things. A static library is just an archive of object files (much like a zip archive). A dynamic library is more like an executable program.

So you can't really link anything into a static library, you can only add more object files.

Upvotes: 0

Related Questions