【源码卖】【PowerJob源码解读】【nsight源码阅读】dlerror 源码

时间:2024-12-28 00:51:44 来源:养成合成app源码 编辑:2048游戏源码及解释

1.android dlopen原型在哪个so

dlerror 源码

android dlopen原型在哪个so

       1、 .so态库

       ä½¿ç”¨gcc或者g++编译器态库文件(处g++编译器例)

       g++ -shared -fPIC -c XXX.cpp

       g++ -shared -fPIC -o XXX.so XXX.o

       2、 .so态库态调用接口函数说明

       æ€åº“调用关系需要调用态库程序编译通g++-L-l命令指定例:程序test启需要加载目录/root/src/liblibtest_so1.so态库编译命令照编写执行:

       g++ -g -o test test.cpp –L/root/src/lib –ltest_so1

       ï¼ˆå¤„我重点讲解态库态调用关于静态通g++编译命令调用式作详细讲解具体相关内容网查询)

       Linux提供专门组API用于完打态库查找符号处理错关闭态库等功能

       é¢äº›æŽ¥å£å‡½æ•°é€ä»‹ç»ï¼ˆè°ƒç”¨äº›æŽ¥å£éœ€å¼•ç”¨æ–‡ä»¶#include ):

       1) dlopen

       å‡½æ•°åŽŸåž‹ï¼švoid *dlopen(const char *libname,源码卖int flag);

       åŠŸèƒ½æè¿°ï¼šdlopen必须dlerrordlsymdlclose前调用表示要库装载内存准备使用要装载库依赖于其库必须首先装载依赖库dlopen操作失败返NULL值;库已经装载则dlopen返同句柄

       å‚æ•°libname般库全路径dlopen直接装载该文件;指定库名称dlopen按照面机制搜寻:

       a.根据环境变量LD_LIBRARY_PATH查找

       b.根据/etc/ld.so.cache查找

       c.查找依/lib/usr/lib目录查找

       flag参数表示处理未定义函数式使用RTLD_LAZY或RTLD_NOWRTLD_LAZY表示暂处理未定义函数先库装载内存等用没定义函数再说;RTLD_NOW表示马检查否存未定义函数若存则dlopen失败告终

       2) dlerror

       å‡½æ•°åŽŸåž‹ï¼šchar *dlerror(void);

       åŠŸèƒ½æè¿°ï¼šdlerror获近dlopen,dlsym或dlclose操作错误信息返NULL表示错误dlerror返错误信息同清除错误信息

       3) dlsym

       å‡½æ•°åŽŸåž‹ï¼švoid *dlsym(void *handle,const char *symbol);

       åŠŸèƒ½æè¿°ï¼šdlopen库装载内存dlsym获指定函数(symbol)内存位置(指针)找指定函数则dlsym返NULL值判断函数否存使用dlerror函数

       4) dlclose

       å‡½æ•°åŽŸåž‹ï¼šint dlclose(void *);

       åŠŸèƒ½æè¿°ï¼šå·²ç»è£…载库句柄减句柄减至零则该库卸载存析构函数则dlclose析构函数调用

       3、 普通函数调用

       å¤„源码实例说明各源码文件关系:

       test_so1.htest_so1.cpptest_so1.so态库

       test_so2.htest_so2.cpptest_so2.so态库

       test_dl.cpptest_dl执行程序test_dl通dlopen系列等API函数并使用函数指针达态调用同so库test函数目

       -

copyright © 2016 powered by 皮皮网   sitemap