Não é possível imprimir números de ponto flutuante da biblioteca compartilhada executável

Estou desenvolvendo uma biblioteca compartilhada que pode ser executada independentemente para imprimir seu próprio número de versão.

Eu defini um ponto 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);
}

e eu compilo com

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ódigocompila ecorre perfeitamente.

Meu problema é quando eu altero o parâmetro do printf para ser um float ou double (% f ou% lf). A biblioteca então compilará, massegfault quando correr.

Alguém tem alguma ideia?

edit1:

Aqui está o 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:

Detalhes ambientais adicionais:

uname -a

Linux mjolnir.site 3.1.10-1.16-desktop # 1 SMP PREEMITO Qua Jun 27 05:21:40 UTC 2012 (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 pelo GNU CC versão 4.6.2. Compilado em um sistema Linux 3.1.0 em 2012-03-30.

edição 3:

Saída em / var / log / messages após segfault:

Aug 11 08:27:45 mjolnir kernel: [10560.068741] liblist.so [11222] proteção geral ip: 7fc2b3cb2314 sp: 7fff4f5c7de8 erro: 0 em libc-2.14.1.so [7fc2b3c63000 + 187000]

questionAnswers(1)

yourAnswerToTheQuestion