2010-04-28 11 views
6

Deseo suministrar las bibliotecas compartidas junto con mi programa en lugar de utilizar el sistema de destino debido a las diferencias de versión.¿Cómo vincular a un archivo libc diferente?

ldd dice mi programa utiliza estas bibliotecas compartidas:

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)** 

me han vinculado con éxito ld-xxx.so al compilar con:

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

Pero no han logrado éxito libc-xxx.so enlace. Cómo puedo hacer eso ?

+1

Es posible que desee considerar estáticamente la vinculación de su programa si sólo tiene un ejecutable. De esta forma nadie perderá accidentalmente su versión de libc y si eliminan su programa no tendrán su libc persistente. – nategoose

+0

Lo mismo pero estáticamente: http://stackoverflow.com/questions/10763394/how-to-build-ac-c-program-using-a-custom-version-of-glibc –

Respuesta

7

descubrí cómo hacerlo:

rpath especifica dónde se encuentran las bibliotecas proporcionadas. Esta carpeta debe contener: libc.so.6, libdl.so.2, libgcc_s.so.1 y tal vez más. Consulte con strace para averiguar qué bibliotecas utiliza su archivo binario.

ld.so es el enlazador proporcionado

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

6

Pasando -nodefaultlibs o -nostdlib a gcc le dirá que no pase las bibliotecas predeterminadas como argumentos a ld. A continuación, podrá especificar explícitamente la libc con la que desea establecer un enlace. Consulte la página del manual gcc(1) para obtener más detalles y advertencias sobre ambas opciones.

+2

Tenga en cuenta que esta publicación es incorrecta. No necesita pasar ninguno de esos 2 indicadores. –

Cuestiones relacionadas