Nie można wydrukować liczb zmiennoprzecinkowych z wykonywalnej biblioteki współdzielonej

Tworzę bibliotekę współdzieloną, która może być wykonywana niezależnie, aby wydrukować swój własny numer wersji.

Zdefiniowałem niestandardowy punkt wejścia jako:

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

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

i kompiluję się z

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

Ten kodkompiluje ibiegnie doskonale.

Moim problemem jest zmiana parametru printf na zmiennoprzecinkowy lub podwójny (% f lub% lf). Biblioteka następnie skompiluje się, alesegfault kiedy biegnie.

Czy ktoś ma jakieś pomysły?

edytuj1:

Oto kod, który segfaultuje:

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); 
} 

edytuj2:

Dodatkowe szczegóły dotyczące środowiska:

uname -a

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

Skonfigurowany dla x86_64-suse-linux. Kompilowany przez GNU CC w wersji 4.6.2. Skompilowany w systemie Linux 3.1.0 w dniu 2012-03-30.

edytuj 3:

Dane wyjściowe w / var / log / messages po segfault:

11 sierpnia 08:27:45 jądro mjolnir: [10560.068741] liblist.so [11222] ochrona ogólna ip: 7fc2b3cb2314 sp: 7fff4f5c7de8 błąd: 0 w libc-2.14.1.so [7fc2b3c63000 + 187000]

questionAnswers(1)

yourAnswerToTheQuestion