我正在开发一个可以独立执行的共享库来打印它自己的版本号。无法从可执行共享库中打印浮点数
我已经定义了一个自定义的入口点为:
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
此代码编译和运行完美编译。
我的问题是当我将printf的参数更改为float或double(%f或%lf)时。然后该库将在运行时编译但段错误。
任何人有任何想法?
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 PREEMPT星期三06月27五点21分四十秒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编译。 在2012年3月30日的Linux 3.1.0系统上编译。
年08月11八点27分45秒MJOLNIR内核::[10560.068741] liblist.so [11222]一般
编辑3:在段错误
输出在/ var /日志/消息保护ip:7fc2b3cb2314 sp:7fff4f5c7de8错误:0在libc-2.14.1.so [7fc2b3c63000 + 187000]
这对我的32位机器来说是完美的。它也应该在64位上工作。你包括和? –
TOC
2012-08-11 06:40:55
@TOC我做到了。您是否尝试打印浮点数作为版本号?我发布的代码工作正常,除了打印浮动。 – kobrien 2012-08-11 06:43:25
你可以显示打印浮球的代码吗? – 2012-08-11 06:43:48