动态加载动态库函数

2019-05-28  本文已影响0人  54c1eca7148a

1、简单的说,前面的动态库的制作和使用一节中,在加载时需要动态加载的资源在执行时被全部加载,而动态加载说的就是加载时按需加载。需要使用以下函数:

dlopen(3)    #参数3代表库函数,2代表系统调用,1代表命令。可以使用man 3 dlopen查看此函数的帮助,使用需要包含头文件 #include<dlfcn.h>

void  *dlopen(const char *filename,int flag);

功能:加载一个动态库文件

参数:

     filename:

        指定要加载的动态库的文件名称

     flag:

        RTLD_LAZY:暂缓决定,等有需要时再解出符号

        RTLD_NOW:立即决定,返回前解决所有未决定的符号

返回值:

    NULL:失败


dlclose(3)

void *dlclose(void *handle)

功能:

    将handle指定的动态库引用计数减1。当计数值为0或没有引用时对应的动态库将被unloaded

参数:

    handle:dlopen(3)的返回值

返回值:

    非0:错误

    0:成功

char *dlerror(void);

功能:

    获取最近调用dlopen,dlclose,dlsym所产生的错误信息

参数:

    void

返回值:

    非空:错误信息

    NULL:无错误信息


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

功能:

    返回有handle指定的动态库里的由symbol所指定加载到内存的地址。

参数:

    handle:dlopen(3)的返回值

    symbol:指定函数的名字

返回值:    

    NULL:在handle指定的动态库中找不到symbol所指定的内容

    非空:加载到内存的地址

举例:见PC的嵌入式练习文件夹


 另外需要注意的是,在链接时需要将上述函数所包含的动态库进行链接,否则无法使用上述函数。即-ldl

上一篇 下一篇

猜你喜欢

热点阅读