2010-04-28 9 views
6

Ich möchte die gemeinsam genutzten Bibliotheken zusammen mit meinem Programm bereitstellen, anstatt das Zielsystem aufgrund von Versionsunterschieden zu verwenden.Wie verlinkt man auf eine andere libc-Datei?

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 erfolgreich ld-xxx.so verknüpft sind durch die Zusammenstellung 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 einer erfolgreichen Verbindung libc-xxx.so verwaltet. Wie kann ich das machen ?

+1

Möglicherweise möchten Sie statisch betrachten Ihr Programm verknüpfen, wenn Sie nur eine ausführbare Datei haben. Auf diese Weise wird niemand versehentlich Ihre Version von libc verlieren und wenn sie Ihr Programm entfernen, wird Ihre libc nicht mehr verfügbar sein. – nategoose

+0

Gleich aber statisch: http://stackoverflow.com/questions/10763394/how-to-build-a-c-program-using-a-custom-version-of-glibc –

Antwort

7

fand ich heraus, wie es geht:

rpath gibt an, wo die zur Verfügung gestellten Bibliotheken befinden. Dieser Ordner sollte enthalten: libc.so.6, libdl.so.2, libgcc_s.so.1 und vielleicht mehr. Überprüfen Sie mit strace, welche Bibliotheken Ihre Binärdatei verwendet.

ld.so ist der bereitgestellte Linker

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

6

Wenn -nodefaultlibs oder -nostdlib an gcc übergeben wird, wird es angewiesen, die Standardbibliotheken nicht als Argumente an ld zu übergeben. Sie können dann die libc, mit der Sie verlinken möchten, explizit angeben. Weitere Details und Vorbehalte zu beiden Optionen finden Sie auf der Manpage gcc(1).

+2

Beachten Sie, dass dieser Beitrag falsch ist. Sie müssen keine dieser 2 Flaggen bestehen. –