so加载的构造函数和析构函数

http://blog.csdn.net/linuw/article/details/6048307

__attribute__ ((constructor))指定的函数在共享库loading的时候调用,__attribute__ ((destructor))指定的函数在共享库unloading的时候调用。

 

so代码:

#include <stdio.h>

__attribute__ ((constructor)) static void so_init(void);
__attribute__ ((destructor)) static void so_deinit(void);

void so_init(void)
{
    printf("call so init.\n");
}

void so_deinit(void)
{
    printf("call so deinit.\n");
}

void test1()
{
    printf("call test1.\n");
}

void test2()
{
    printf("call test2.\n");
}

void test3()
{
    printf("call test3.\n");
}


/*
gcc -fPIC -c so_lib.c   
gcc -shared -o libxxx.so so_lib.o
*/

 

 

app代码:

#include <stdlib.h>
#include <stdio.h>
#include <dlfcn.h> /* dlopen, dlsym, dlclose */

void test1();
void test2();
void test3();

int main(int argc, char **argv)
{
    test1();
    test2();
    test3();

    /* below only for testing dynamic linking loader */
    void *handle;
    void (*test)();
    char *error;

    handle = dlopen ("./libxxx.so", RTLD_LAZY);
    if (!handle) {
        fputs(dlerror(), stderr);
        exit(1);
    }

    test = dlsym(handle, "test2");
    if ((error = dlerror()) != NULL)  {
        fputs(error, stderr);
        exit(1);
    }

    (*test)();
    dlclose(handle);

    return 0;
}

/*
gcc so_app.c -ldl -L./ -lxxx 
  
export LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH && ./a.out 
*/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值