Frage

Ich mag vielmehr die gemeinsame Bibliotheken zusammen mit meinem Programm liefern, als das Zielsystem aufgrund Versionsunterschiede werden.

ldd sagt mein Programm diese gemeinsamen Bibliotheken verwendet:

linux-gate.so.1 =>  (0xf7ef0000)**(made by kernel)**  
libc.so.6 => /lib32/libc.so.6 (0xf7d88000)**(libc-2.7.so)**  
/lib/ld-linux.so.2 (0xf7ef1000)**(ld-2.7.so)**

Ich habe ld-xxx.so erfolgreich verknüpft durch Kompilieren mit:

gcc -std=c99 -D_POSIX_C_SOURCE=200112L -O2 -m32 -s -Wl,-dynamic-linker,ld-2.7.so myprogram.c

Aber ich habe nicht zu einem erfolgreichen Verbindung libc-xxx.so verwaltet. Wie kann ich das tun?

War es hilfreich?

Lösung

Ich fand heraus, wie es zu tun:

rpath legt fest, wo die zur Verfügung gestellten Bibliotheken befinden. Dieser Ordner sollte enthalten: libc.so.6, libdl.so.2, libgcc_s.so.1 und vielleicht auch mehr. Erkundigen Sie sich bei strace, um herauszufinden, welche Bibliotheken Ihre Binärdatei Anwendungen.

ld.so ist der bereitgestellte Linker

gcc -Xlinker -rpath=/default/path/to/libraries -Xlinker -I/default/path/to/libraries/ld.so program.c

Andere Tipps

Passing -nodefaultlibs oder -nostdlib zu gcc wird ihm sagen, nicht die Standardbibliotheken als Argumente an ld übergeben. Sie werden dann in der Lage sein, explizit die libc Sie verknüpfen möchten angeben, gegen. Siehe die gcc(1) man Seite für weitere Details und Einschränkungen in Bezug auf beiden Optionen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top