Usage

Synopsis

staticx [-h]
        [-l LIB] [--strip] [--no-compress] [-V]
        [--loglevel LEVEL]
        PROG OUTPUT
Positional Arguments:
PROG

Input program to bundle

OUTPUT

Output path

Options:
-h, --help

Show help message and exit

-l LIB

Add additional library (absolute path)

This option can be given multiple times.

--strip

Strip binaries before adding to archive (reduces size)

--no-compress

Don’t compress the archive (increases size)

--loglevel LEVEL

Set the logging level (default: WARNING)

Options: DEBUG,INFO,WARNING,ERROR,CRITICAL

--debug

Set loglevel to DEBUG and use a debug version of the bootloader

-V, --version

Show StaticX version and exit

Usage

Basic wrapping of an executable:

staticx /path/to/exe /path/to/output

StaticX will automatically discover and bundle most normal linked libraries. However, libraries loaded by an application at runtime via dlopen() cannot currently be detected. These can be manually included in the application bundle by using the -l option (any number can be specified by repeating the -l option):

staticx -l /path/to/fancy/library.so /path/to/exe /path/to/output

Caveats

StaticX employs a number of tricks to run applications with only their bundled libraries to ensure compatibilitiy. Because of this, there are some caveats that apply to StaticX-bundled applications:

  • The dynamic linker is instructed (via nodeflib) to only permit bundled libraries to be loaded.

  • Target NSS configuration (/etc/nsswitch.conf) is ignored (for GLIBC-linked applications) which means that some advanced name services (e.g. Active Directory) will not be available at runtime. For example, looking up the UID number of a domain user will not work.

Run-time Information

StaticX sets the following environment variables for the wrapped user program:

  • STATICX_BUNDLE_DIR: The absolute path of the “bundle” directory, the temporary dir where the archive has been extracted.

  • STATICX_PROG_PATH: The absolute path of the program being executed.