Quiero suministrar las bibliotecas compartidas junto con mi programa en lugar de usar el sistema de destino debido a las diferencias de versión.
ldd
dice que mi programa usa estas librerías 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)**
He vinculado con éxito ld-xxx.so compilando con:
gcc -std=c99 -D_POSIX_C_SOURCE=200112L -O2 -m32 -s -Wl,-dynamic-linker,ld-2.7.so myprogram.c
Pero no he logrado vincular con éxito libc-xxx.so
. Cómo puedo hacer eso ?
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 Verifique con strace para averiguar qué bibliotecas usa 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
Paso -nodefaultlibs
o -nostdlib
to gcc le indicará que no pase las bibliotecas predeterminadas como argumentos a ld. Luego podrá especificar explícitamente la libc con la que desea vincular. Ver el gcc(1)
man page para obtener más detalles y advertencias sobre ambas opciones.
Es posible que desee considerar vincular estáticamente su programa si solo tiene un ejecutable. De esta manera, nadie perderá accidentalmente su versión de libc y, si eliminan su programa, no tendrán su libc persistente.
– ganso nate
28 de abril de 2010 a las 17:26
Igual pero estáticamente: stackoverflow.com/questions/10763394/…
– Ciro Santilli Путлер Капут 六四事
8 jun 2015 a las 20:14