1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 42.Linux/Unix 系统编程手册(下) -- 共享库高级特性

42.Linux/Unix 系统编程手册(下) -- 共享库高级特性

时间:2019-01-15 09:15:53

相关推荐

42.Linux/Unix 系统编程手册(下) -- 共享库高级特性

1.动态加载库当一个可执行文件开始运行之后,动态链接器会加载程序的动态依赖列表中的所有共享库,但有时候需要延迟加载库是比较有用的。 如只在需要的时候加载一个插件。动态链接器的这项功能是通过一组 API 实现的。这组 API 被称为 dlopen API。dlopen API 使得程序能够在运行的时候打开一个共享库,根据名字在库中搜索一个函数,然后调用这个函数.在运行的时候才要这种方式加载的共享库通常被称为动态加载的库。dlopen(); //打开一个共享库,返回一个供后续调用的句柄dlsym(); //在库中搜索一个符号(一个保护函数或者变量的字符串)并返回其地址。dlclose(); //关闭之前打开的库dlerror(); //返回一个错误消息字符串要在Linux上使用 dlopen API 构建程序的时候必须指定 -ldl 选项以便与 libdl 库链接起来。dladdr(); //返回一个包含地址 addr 的相关信息.2.在主程序中访问符号假设使用 dlopen() 动态加载了一个共享库,然后使用 dlsym() 获取了动态库中 x() 函数的地址,然后调用 x()。如果 x() 函数中调用了 y(),那么通常会在程序加载的其中一个共享库中搜索 y()。有些时候需要让 x() 调用主程序中的 y() 实现(类似于回调机制)。为了达到这个目的就必须要使主程序的符号(全局作用域)对动态链接器可用,即在链接程序时使用 --export-dynamic 链接器选项。gcc -W1,--export-dynamic main.c或者gcc --export-dynamic main.c使用这些选项的一个就能够允许动态加载的库访问主程序中的全局符号。3.监控动态链接器 : LD_DEBUGLD_DEBUG=help date

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。