热门关键字:  ubuntu  分区  函数  Fedora  linux系统进程

当前位置 :| 主页>Linux教程>编程开发>C++>

共享库的初始化和~初始化函数分析

来源: 作者: 时间:2008-05-25 Tag: 点击:

共享库的初始化和~初始化函数分析

 

转载时请注明出处:http://blog.csdn.net/absurd/

 

Win32下可以通过DllMain来初始化和~初始化动态库,而Linux下则没有与之完全对应的函数,但可以通过一些方法模拟它的部分功能。有人会说,很简单,实现_init/_fini两个函数就行了。好,我们来看看事实是不是这样的。

 

很多资料上都说可以利用_init/_fini来实现,而我从来没有测试成功过,原因是这两个函数都已经被gcc占用了。比如:

test.c

#include <stdio.h>

 

void _init(void)

{

    printf("%s", __func__);

}

 

void _fini(void)

{

    printf("%s", __func__);

}

 

编译结果:

[root@localhost soinit]# gcc -g test.c -shared -o libtest.so

/tmp/cc4DUw68.o(.text+0x0): In function `_init':

/work/test/soinit/test.c:5: multiple definition of `_init'

/usr/lib/gcc/i386-redhat-linux/4.0.0/../../../crti.o(.init+0x0): first defined here

/tmp/cc4DUw68.o(.text+0x1d): In function `_fini':

/work/test/soinit/test.c:10: multiple definition of `_fini'

/usr/lib/gcc/i386-redhat-linux/4.0.0/../../../crti.o(.fini+0x0): first defined here

collect2: ld returned 1 exit status

 

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册