Das Konvertieren einer Reihe von gemeinsam genutzten Objekten und einer gemeinsam genutzten ELF-Datei mit gemeinsam genutzten Bibliotheken in einen statisch verknüpften Blob ist nicht einfach.
Das von Ihnen erwähnte ausführbare Archiv ist möglicherweise möglich. Angenommen, mit "ausführbares Archiv" haben Sie eine Datei gemeint, die sich beim Ausführen selbst entpackt und ein Programm ohne Abhängigkeiten von anderen Dateien im System ausführt.
Dies kann ganz einfach mit einem Shell-Skript und einer Reihe von Dienstprogrammen erfolgen, die in den meisten Linux-Distributionen zu finden sind (es werden jedoch Abhängigkeiten von der Shell und den Dienstprogrammen hinzugefügt). Das Erstellen eines ausführbaren ELF-Archivs ist möglicherweise viel aufwändiger, obwohl die Prinzipien dieselben sind. Wenn Sie erwarten, dass Ihre Version des Programms häufig ausgeführt wird, sollten Sie das Skript so ändern, dass es auf dem Benutzersystem installiert wird, wie von David und janneb angegeben .
Ein Beispiel für die Verwendung eines auf Shell-Skripten basierenden ausführbaren Archivs
Sammeln Sie die Dateien, die Sie für die Ausführung benötigen. Ein Beispiel mit einem cat
Programm hätte Folgendes:
fachas_cat_files/cat
fachas_cat_files/lib/libc.so.6
Base64 codiert die tgz-Datei und erstellt sie. cat.b64
Dies kann nach dem Einrichten Ihres fachas_cat_files
Verzeichnisses folgendermaßen erfolgen.
tar -cz fachas_cat_files | base64 > cat.b64
Dadurch wird die TAR-Datei mit druckbaren Zeichen dargestellt, sodass sie in das Skript aufgenommen werden kann.
Notieren Sie sich die md5-Summen der Dateien, die Sie verpacken, und überprüfen Sie im Shell-Skript, ob die nicht geteerten Dateien Ihre eigenen sind oder nicht.
find fachas_cat_files/ -type f -exec md5sum {} \; > cat.md5
Erstellen Sie ein Shell-Skript wie das folgende und nennen Sie es Ihr neues "Archiv" -Programm.
#!/bin/bash
TEMP_DIR=/tmp
# Check Md5sum
md5sum -c --quiet >/dev/null 2>&1 <<EOF
--- Paste contents of cat.md5 here. ---
EOF
# Untar from base64 encoded tarball.
test $? -eq 0 || base64 -d <<EOF | tar -xz -C ${TEMP_DIR}
--- Paste contents of cat.b64 here. ---
EOF
# Execute the binary.
LD_LIBRARY_PATH=${TEMP_DIR}/fachas_cat_files/lib/ ${TEMP_DIR}/fachas_cat_files/cat $*
# Optionally remove the temporary files, if you do, the whole md5sum set of steps is
# not necessary.
# rm -fr ${TEMP_DIR}/fachas_cat_files