Невозможно распечатать числа с плавающей запятой из исполняемой общей библиотеки
Я разрабатываю разделяемую библиотеку, которая может быть выполнена независимо, чтобы напечатать ее собственный номер версии.
Я определил пользовательскую точку входа как:
const char my_interp[] __attribute__((section(".interp"))) = "/lib64/ld-linux-x86-64.so.2";
void my_main() {
printf("VERSION: %d\n", 0);
_exit(0);
}
и я собираю с
gcc -o list.os -c -g -Wall -fPIC list.c
gcc -o liblist.so -g -Wl,-e,my_main -shared list.os -lc
Этот кодcompiles а такжеruns в совершенстве.
Моя проблема, когда я изменяю параметр printf на float или double (% f или% lf). Затем библиотека скомпилируется, ноsegfault когда беги.
У кого-нибудь есть идеи?
edit1:
Вот код, который 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:
Дополнительные сведения об окружающей среде:
uname -a
Linux mjolnir.site 3.1.10-1.16-рабочий стол # 1 ПРЕДСТАВЛЕНИЕ SMP Ср 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
Настроен для x86_64-suse-linux. Составлено GNU CC версии 4.6.2. Скомпилировано в системе Linux 3.1.0 2012-03-30.
edit 3:
Вывод в / var / log / messages при segfault:
11 августа 08:27:45 ядро mjolnir: [10560.068741] liblist.so [11222] общая защита ip: 7fc2b3cb2314 sp: 7fff4f5c7de8 ошибка: 0 в libc-2.14.1.so [7fc2b3c63000 + 187000]