2016-06-20 4 views
1

Ich habe einige sehr spezielle Bedürfnisse: Ist es möglich, eine .so Datei statisch zu einer gebauten ausführbaren Datei zu verknüpfen, so dass die ausführbare Datei diese .so nicht mehr dynamisch verknüpft?Statisch verknüpfen ein .so mit einer ausführbaren Datei

+0

sehr spezifische Bedürfnisse? Bonita, google einfach "ldd statische Verknüpfung wie" –

+0

Ich bin mir nicht sicher, ob du mich richtig verstanden hast. Ich möchte als Lösung eine bereits verknüpfte Excel-Datei statisch mit einer Menge ihrer dynamischen Abhängigkeiten verknüpfen. Es ist nicht möglich, ein Howto für dieses Problem mit dem Suchstring zu finden, den Sie erwähnen. –

+0

Es ist sehr einfach, eine gute Anleitung zu finden –

Antwort

0

Ein ELF gemeinsames Objekt sollte irgendwie dynamically linked sein und sollte praktisch position-independent code enthalten (dies wird dringend empfohlen, aber in der Theorie nicht zwingend). Siehe auch this

Für alle Details lesen Sie Drepper's Papier How To Write Shared Libraries (mehr als 100 Seiten).

Lesen Sie auch die Program Library HOWTO und die C++ dlopen minihowto.

Vielleicht möchten Sie einfach die ausführbare Datei in der Lage sein, etwas Sinnvolles zu tun, wenn die gemeinsame Bibliothek fehlt. Dann können Sie es einfach explizit (als Plugin) zur Laufzeit laden unter Verwendung von dlopen(3), behandeln Sie gut die Fehler Fehlerfall, und bei Erfolg erhalten Sie die entsprechenden Symbole von ihm mit dlsym(3). Siehe auch ld-linux.so(8), elf(5), execve(2), mmap(2)

Vielleicht haben Sie eine völlig statische ELF ausführbare haben wollen. Dann sollten Sie es als solches erstellen (und nur statische Bibliotheken verwenden).

Vielleicht mögen Sie den Text, Daten und Relocation Informationen aus dem gemeinsamen Objekt extrahieren (das könnte schmerzhaft machbar mit objdump, readelf oder einem Code mit libbfd oder libelf) und einig verknüpfbaren Objektdatei neu erstellen (vielleicht mit ld -r oder einige schmerzhafte ld Skript). Ich bin mir nicht sicher, ob es in allen Fällen vollständig machbar ist (z.B. wenn die .so selbst dynamische Abhängigkeiten aufweist), und es ist sicherlich schmerzhaft.

PS. Bitte motivieren Sie Ihre Frage viel mehr und erklären Sie, warum Sie wirklich fragen. Ich habe ein paar blinde Vermutungen angestellt. Ich nehme an, Sie haben Zugriff auf den Quellcode und können einige davon ändern.