Diese Arbeit wird.
# Generate position independent code (PIC)
gcc -fPIC -c -o xxx.o xxx.c
# Build a shared object and link with static libraries
ld -shared -static -o xxx.so xxx.o
# Same thing but with static libc
ld -shared -static -o xxx.so xxx.o -lc
eine Klarstellung: die -static Flagge, auf gcc gegeben, wenn, wird an den Linker übergeben (ld) und teilt ihr mit, dass sie mit der statischen Version (.a) einer Bibliothek (die mit dem Flag -l angegeben ist) und nicht mit der dynamischen Version (.so) arbeiten soll.
Eine andere Sache: Auf meinem System (Debian) gibt das letzte Beispiel eine libc.a ... mit -fPIC Fehler neu kompilieren. Ziemlich sicher, das bedeutet, dass die libc.a, die ich auf meinem System habe, nicht mit -fPIC kompiliert wurde. Ein apt-cache Suche libc Bild gab jedoch einige Ergebnisse.
Siehe auch: Program Library HOWTO, SO: combining .so libs, ld(1), gcc(1)
@Inshalla, ich denke, das Problem ist, dass wir zwei mögliche .so zu einer verknüpfen . Bisher habe ich es versucht und gescheitert. –
Bitte beachten Sie den Link "SO: Kombination .so libs" 'in meiner Antwort. Es scheint keine einfache Möglichkeit zu geben, dynamische Bibliotheken zu kombinieren, wenn sie nicht mit dem Flag '--relocatable' verknüpft wurden (siehe Manpage ld (1)). – Inshallah
@Inshallah - Wenn Sie Nicht-PIC-Code in ein gemeinsames Objekt einbinden möchten, können Sie die gcc-Flags "-mimpure-text" verwenden. Nicht-PIC-Code in gemeinsam genutzten Objekten funktioniert gut, hat aber einige Nachteile (Codepages können nicht zwischen Prozessen aufgeteilt werden und erfordern Swap-Speicher, Relokationen verlangsamen das Laden des gemeinsam genutzten Objekts, können jedoch zur Laufzeit etwas schneller sein, da PIC-Code ~ ist 5% langsamer). –