When you compile a binary, say, nginx
from source code, it's built with information regarding what versions of the libraries are on the system that is compiling the binaries. The libraries to reference of course are determined by the arguments (for nginx
, that's the definition of which modules you want activated or not). But that binary which you built will (unlikely) run on a separate system, unless its an identically-configured system.
You will want to compile the application on each individual system, its (relatively) unlikely you will be able to port the compiled version to another system that might not have a compatible version of each library.
Note: While you can get a binary to port to another Linux system, its ill-advised and usually is time consuming. This is because:
(1) You need to make sure the system you're going to move your binary to is using the same version of libc
that was used to compile the binaries
(2) You need to make sure that the libraries used within the program are able to be detected easily on your system, and that they are the same (or compatible) versions as were used to create the program.
...and of course other variables to consider. It's just easier in the long run to compile the program on each system to use it rather than try to strive for portability.
dpkg -S /usr/lib/i386-linux-gnu
). Most distros have something like this though there are a few variations, and in particular it's different on RedHat-derived distros.