Wie in eine andere libc-Datei zu verknüpfen?
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?
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.