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
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
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.
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.