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

Input program to bundle


Output path

-h, --help

Show help message and exit

-l LIB

Add additional library (absolute path)

This option can be given multiple times.


Strip binaries before adding to archive (reduces size)


Don’t compress the archive (increases size)

--loglevel LEVEL

Set the logging level (default: WARNING)



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

-V, --version

Show StaticX version and exit


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/ /path/to/exe /path/to/output


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.