问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

linux下的动态库是如何在程序运行时加载

发布网友 发布时间:2022-04-22 15:56

我来回答

1个回答

热心网友 时间:2023-09-30 23:03

直接上代码,祈祷排版不要乱掉,一下源码来自http://lameck.blog.163.com/blog/static/388113742011111591750149/

//test.h
#ifndef _TEST_H_
#define _TEST_H_
typedef int (*TEST_FUN)(void);
#endif

//test.c gcc -c test.c -o test.o
//       gcc -shared test.o -o libtest.so
#include <stdio.h>
#include "test.h"
int test_fun(void)
{
    printf("this is a test!\n");
    return 0;
}

//main.c gcc main.c -o main -ldl
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
#include "test.h"
 
int main()
{
    void *handle = NULL;
    TEST_FUN p = NULL;
    char *error = NULL;
 
    handle = dlopen("./libtest.so", RTLD_LAZY);
    if( (error=dlerror())!=NULL )
    {
        printf("%s\n", error);
        exit(1);
    }
    p = (TEST_FUN)dlsym(handle, "test_fun");
    if( (error=dlerror())!=NULL )
    {
        printf("%s\n", error);
        dlclose(handle);
        exit(1);
    }
    p();
    dlclose(handle);
    return 0;
}

主要函数

void * dlopen( const char * pathname, int mode );

void* dlsym(void* handle,const char* symbol);

const char *dlerror(void);

int dlclose (void *handle);

这些基本上可以从函数签名中得到实际功能和使用方法..

除了mode参数,其他的想必能够通过阅读源代码来学习吧

关于dlopen的mode参数有如下几个常量:

1、解析方式

2、作用范围

3、作用方式

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
什么药止痒效果好 慕容三藏履历 职业cf电脑配置cf电脑配置要求是什么 玩3a电脑配置要求想玩3a大作需要什么配置 台式电脑哪些可以畅享3a大作想玩3a大作需要什么配置 七彩虹i7-10700台式机 性能强劲 高效静音 小黄鱼游戏台式电脑主机(i7-10700F、16GB、512GB、RTX3070)-适用... 工伤保险记什么科目 在4×4的正方形格纸中,有一个以格点为顶点的△ABC,请你找到点C,使三角... 在4×4方格中, 要求C点在格点上,且以AB为边的△ABC为直角三角形,标出所... 下面是几个学生家三月份电费情况统计 请教关于android linux动态库.so的加载调用 2020年1月2月3月4月5月6月7月电费清单 求助,undefined reference to symbol dlopen@GLIBC 用2个月的水费电费燃气费制成复式条形统计图 交叉编译时提示 对&#39;__C_ctype_b&#39;的未定义引用 小学生水费电费统计表怎么画 几个房子的用电清单哪里可以查询到,我需要统计电费? 上几个月的电费单可以去那里查?我需要统计电费情况 电脑怎样设置才可以在桌面上任意位置放东西? 电脑桌面可以随意拖放怎么设置 球釜电饭煲怎么蒸米饭什么键 如何设置电脑桌面软件随意在什么地方 淘客店铺应该如何运营 404 Not Found 商家弄淘宝客具体怎么操作?有懂得大神吗? 淘宝客一两块包邮的店家如何找? 电脑硬盘打不开提示什么加载模块失败 电脑磁盘打不开怎么办 电脑一开机为什么提示硬盘有问题 电费有一年统计吗? Linux下C/C++动态库在运行时是怎样加载进来的 五个月水费和电费统计图 linux动态库调用动态库linux动态库的调用 水电费统计表(A4纸可打印) 想请教一下给各位大神,c中调用.so动态库的函数,直接调用函数和使用dlopen调用有什么不同 普通工业电费如何计算电费? dlopen和System.loadLibrary的区别 如何在麒麟系统中调用so读卡动态库? 电费第一阶梯第二阶梯是怎么计算的 无法获取未定义null的情形怎么办 统计家里的电费水费电话费等生活费用 为什么调用dlopen崩溃 无法获取未定义null的情形怎么办? 我家三个人,6、7、8月份,一般晚上开两台空调,每个月电费580多元,比往年都要多,是不是很不正常? 下表是王依琳家2019年上半年电费开支情况统计表可是不小心被水弄湿擦破了你知 hhvm和php的载入so的不同 请问美国的电费贵吗? 一个完整的电脑配置需要哪些东西