Estoy desarrollando una biblioteca compartida que se puede ejecutar de forma independiente para imprimir su propio número de versión.No se pueden imprimir los números de coma flotante de la biblioteca compartida ejecutable
he definido un punto de entrada personalizado como:
const char my_interp[] __attribute__((section(".interp"))) = "/lib64/ld-linux-x86-64.so.2";
void my_main() {
printf("VERSION: %d\n", 0);
_exit(0);
}
y compilo con
gcc -o list.os -c -g -Wall -fPIC list.c
gcc -o liblist.so -g -Wl,-e,my_main -shared list.os -lc
Este código compila y carreras perfectamente.
Mi problema es cuando cambio el parámetro de printf para que sea un flotante o doble (% f o% lf). La biblioteca compilará pero segfault cuando se ejecute.
¿Alguien tiene alguna idea?
edit1:
Aquí está el código que segfaults:
const char my_interp[] __attribute__((section(".interp"))) = "/lib64/ld-linux-x86-64.so.2";
void my_main() {
printf("VERSION: %f\n", 0.1f);
_exit(0);
}
Edit2:
detalles ambientales adicionales:
uname -a
Linux mjolnir.site 3.1.10-1.16-escritorio # 1 SMP PREEMPT Mie Jun 27 de 2012 05:21:40 GMT (d016078) x86_64 x86_64 x86_64 GNU/Linux
gcc --version
gcc (SUSE Linux) 4.6.2
/lib64/libc.so.6
Configurado para x86_64-suse-linux. Compilado por GNU CC versión 4.6.2. Compilado en un sistema Linux 3.1.0 en 2012-03-30.
edición 3:
salida en/var/log/messages sobre violación de segmento:
Ago 11 08:27:45 mjolnir núcleo: [10560.068741] liblist.so [11222] generales ip de protección: 7fc2b3cb2314 sp: error 7fff4f5c7de8: 0 en libc-2.14.1.so [7fc2b3c63000 + 187000]
Esto funciona perfectamente en mi máquina de 32 bits. Y debería funcionar en 64 bits también. ¿Incluyó y ? –
TOC
@TOC lo hice. ¿Intentó imprimir un número de coma flotante como el número de versión? El código que publiqué funciona bien, excepto cuando se imprime un flotador. – kobrien
¿Puedes mostrar el código que imprime el flotador? –