测试同一个动态链接库重复dlopen是否会更新

这篇博客探讨了在不使用dlclose的情况下,程序多次调用dlopen函数加载同一个动态链接库(.so文件)时,库是否会被更新的问题。实验结果显示,dlopen在不释放链接库的情况下不会更新已加载的库。
摘要由CSDN通过智能技术生成

主函数文件main_dl.c:

#include <stdio.h>
#include <dlfcn.h>
#include <unistd.h>
#include <time.h>

int main()
{
    void (*func)();
    void *handle = NULL;
    char *myso = "./mylib.so";
    while(1)
    {
        sleep(1);
        if((handle = dlopen(myso, RTLD_NOW)) != NULL) {
            printf("success\n");
            func = (void(*)())dlsym(handle, "__printf");
            if(func != NULL)(*func)();
            else printf("dlsym - %s\n", dlerror());
            //dlclose(handle);
        }
        else printf("dlopen - %s\n", dlerror());
    }
}

编译:gcc main_dl.c -ldl -rdynamic


链接库文件mylib.c:

#include <stdio.h>
void  __printf() {
    printf("version 2\n");
}
编译:gcc -fPIC -shared -o mylib.so mylib.c


验证证明,如果不dlclose,程序重复dlopen并不会更新加载的链接库文件。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值