我正在开发一个可以独立执行的共享库来打印它自己的版本号。
const char my_interp[] __attribute__((section(".interp"))) = "/lib64/ld-linux-x86-64.so.2"; void my_main() { printf("VERSION: %dn",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
此代码编译和运行完美。
在库和程序之间共享variables
如何使用dlopen加载共享库中的gdb打印符号?
如何找出共享对象的哪些函数被程序或其他库使用?
Linux下的共享库加载地址
在Eclipse CDT中为远程debugging启动部署文件的正确方法是什么?
我的问题是当我将printf的参数更改为float或double(%f或%lf)时。 运行时,库将会编译但segfault 。
有人有主意吗?
EDIT1:
const char my_interp[] __attribute__((section(".interp"))) = "/lib64/ld-linux-x86-64.so.2"; void my_main() { printf("VERSION: %fn",0.1f); _exit(0); }
EDIT2:
额外的环境细节:
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
configuration为x86_64-suse-linux。 由GNU CC版本4.6.2编译。 在2012年3月30日编译在Linux 3.1.0系统上。
编辑3:
在段错误时输出在/ var / log / messages:
8月11日08:27:45 mjolnir内核:[10560.068741] liblist.so [11222]一般保护ip:7fc2b3cb2314 sp:7fff4f5c7de8错误:0在libc-2.14.1.so [7fc2b3c63000 + 187000]
无法链接应用程序与mudflap
了解使用gcc的共享库
在共享库中使用全局variables
弄清楚了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。