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

简介: http://blog.csdn.net/linuw/article/details/6048307__attribute__ ((constructor))指定的函数在共享库loading的时候调用,__attribute__ ((destructor))指定的函数在共享库unloading的时候调用。

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 
*/

 

目录
相关文章
|
4月前
|
安全 编译器 C++
C++一分钟之-构造函数与析构函数
【6月更文挑战第20天】C++中的构造函数初始化对象,析构函数负责资源清理。构造函数有默认、参数化和拷贝形式,需注意异常安全和成员初始化。析构确保资源释放,避免内存泄漏,要防止重复析构。示例代码展示了不同构造函数和析构函数的调用情况。掌握构造和析构是有效管理对象生命周期和资源的关键。
43 2
|
5月前
|
C++ Linux
|
4月前
|
编译器 C语言 C++
【C++】:构造函数和析构函数
【C++】:构造函数和析构函数
45 0
|
5月前
|
编译器 C++
【c++】构造函数和析构函数
【c++】构造函数和析构函数
【c++】构造函数和析构函数
|
5月前
|
编译器 C语言 C++
C++构造函数,析构函数
C++构造函数,析构函数
|
5月前
|
存储 编译器 Linux
构造函数与析构函数的问题总结
构造函数与析构函数的问题总结
64 0
|
编译器 C++
<c++> 类的构造函数与类的析构函数
<c++> 类的构造函数与类的析构函数
92 0
|
搜索推荐 编译器 C++
【C++构造函数与析构函数】
【C++构造函数与析构函数】
|
编译器 C++
【C++要笑着学】类的默认成员函数详解 | 构造函数 | 析构函数 | 构造拷贝函数(一)
朋友们好啊,今天终于更新了。我是柠檬叶子C,本章将继续讲解C++中的面向对象的知识点,本篇主要讲解默认成员函数中的构造函数、析构函数和拷贝构造函数。还是和以前一样,我们将由浅入深地去讲解,以 "初学者" 的角度去探索式地学习。会一步步地推进讲解,而不是直接把枯燥的知识点倒出来,应该会有不错的阅读体验。如果觉得不错,可以 "一键三连" 支持一下博主!你们的关注就是我更新的最大动力!Thanks ♪ (・ω・)ノ
128 0
【C++要笑着学】类的默认成员函数详解 | 构造函数 | 析构函数 | 构造拷贝函数(一)
|
安全 编译器 C++
【C++要笑着学】类的默认成员函数详解 | 构造函数 | 析构函数 | 构造拷贝函数(二)
朋友们好啊,今天终于更新了。我是柠檬叶子C,本章将继续讲解C++中的面向对象的知识点,本篇主要讲解默认成员函数中的构造函数、析构函数和拷贝构造函数。还是和以前一样,我们将由浅入深地去讲解,以 "初学者" 的角度去探索式地学习。会一步步地推进讲解,而不是直接把枯燥的知识点倒出来,应该会有不错的阅读体验。如果觉得不错,可以 "一键三连" 支持一下博主!你们的关注就是我更新的最大动力!Thanks ♪ (・ω・)ノ
94 0
【C++要笑着学】类的默认成员函数详解 | 构造函数 | 析构函数 | 构造拷贝函数(二)