Fließkommazahlen können nicht aus einer ausführbaren gemeinsam genutzten Bibliothek gedruckt werden

Ich entwickle eine gemeinsam genutzte Bibliothek, die unabhängig ausgeführt werden kann, um ihre eigene Versionsnummer zu drucken.

Ich habe einen benutzerdefinierten Einstiegspunkt definiert als:

const char my_interp[] __attribute__((section(".interp"))) = "/lib64/ld-linux-x86-64.so.2";

void my_main() {
   printf("VERSION: %d\n", 0);
   _exit(0);
}

und ich kompiliere mit

gcc -o list.os -c -g -Wall -fPIC list.c
gcc -o liblist.so -g -Wl,-e,my_main -shared list.os -lc

Dieser Codekompiliert undläuft perfekt.

Mein Problem ist, wenn ich den Parameter von printf in float oder double (% f oder% lf) ändere. Die Bibliothek wird dann aber kompiliertsegfault beim rennen.

Hat jemand irgendwelche Ideen?

edit1:

Hier ist der Code, der standardmäßig verwendet wird:

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:

Zusätzliche Umweltdetails:

uname -a

Linux mjolnir.site 3.1.10-1.16-desktop # 1 SMP PREEMPT Mi 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

Konfiguriert für x86_64-suse-linux. Kompiliert mit GNU CC Version 4.6.2. Kompiliert auf einem Linux 3.1.0-System am 30.03.2012.

3 bearbeiten:

Ausgabe in / var / log / messages bei segfault:

11. August 08:27:45 mjolnir kernel: [10560.068741] liblist.so [11222] allgemeiner Schutz ip: 7fc2b3cb2314 sp: 7fff4f5c7de8 error: 0 in libc-2.14.1.so [7fc2b3c63000 + 187000]

Antworten auf die Frage(1)

Ihre Antwort auf die Frage