知识大全 在Linux创建库函数(5)

Posted 函数

篇首语:吃过的馍馍不香,嚼过的甘蔗不甜。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 在Linux创建库函数(5)相关的知识,希望对你有一定的参考价值。

在Linux创建库函数(5)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  摘要:和luster学习在Linux创建库函数   不兼容的函数库      如果一个新版的函数库要和老版本的二进制的库不兼容 则soname需要改变 对于C语言 一共有 个基本的理由使得它们在二进制代码上很难兼容       o 一个函数的行文改变了 这样它就可能与最开始的定义不相符合       o 输出的数据项改变了       o 某些输出的函数删除了       o 某些输出函数的接口改变了       如果你能避免这些地方 你就可以保持你的函数库在二进制代码上的兼容 或者说 你可以使得你的程序的应用二进制接口(ABI Application Binary Interface)上兼容        动态加载的函数库Dynamically Loaded (DL) Libraries      动态加载的函数库Dynamically loaded (DL) libraries是一类函数库 它可以在程序运行过程中的任何时间加载 它们特别适合在函数中加载一些模块和plugin扩展模块的场合 因为它可以在当程序需要某个plugin模块时才动态的加载 例如 Pluggable Authentication Modules(PAM)系统就是用动态加载函数库来使得管理员可以配置和重新配置身份验证信息       Linux系统下 DL函数库与其他函数库在格式上没有特殊的区别 我们前面提到过 它们创建的时候是标准的object格式 主要的区别就是这些函数库不是在程序链接的时候或者启动的时候加载 而是通过一个API来打开一个函数库 寻找符号表 处理错误和关闭函数库 通常C语言环境下 需要包含这个头文件       Linux中使用的函数和Solaris中一样 都是dlpoen() API 当时不是所有的平台都使用同样的接口 例如HP UX使用shl_load()机制 而Windows平台用另外的其他的调用接口 如果你的目的是使得你的代码有很强的移植性 你应该使用一些wrapping函数库 这样的wrapping函数库隐藏不同的平台的接口区别 一种方法是使用glibc函数库中的对动态加载模块的支持 它使用一些潜在的动态加载函数库界面使得它们可以夸平台使用 具体可以参考tml 另外一个方法是使用libltdl 是GNU libtool的一部分 可以进一步参考CORBA相关资料        dlopen()      dlopen函数打开一个函数库然后为后面的使用做准备 C语言原形是      void * dlopen(const char *filename int flag);      如果文件名filename是以 / 开头 也就是使用绝对路径 那么dlopne就直接使用它 而不去查找某些环境变量或者系统设置的函数库所在的目录了 否则dlopen()      就会按照下面的次序查找函数库文件      环境变量LD_LIBRARY指明的路径 /etc/ld so cache中的函数库列表 /lib目录 然后/usr/lib 不过一些很老的a out的loader则是采用相反的次序 也就是先查/usr/lib 然后是/lib     Dlopen()函数中 参数flag的值必须是RTLD_LAZY或者RTLD_NOW RTLD_LAZY的意思是resolve undefined symbols as code from the dynamic library is executed 而RTLD_NOW的含义是resolve all undefined symbols before dlopen() returns and fail if this cannot be done       如果有好几个函数库 它们之间有一些依赖关系的话 例如X依赖Y 那么你就要先加载那些被依赖的函数 例如先加载Y 然后加载X       dlopen()函数的返回值是一个句柄 然后后面的函数就通过使用这个句柄来做进一步的操作 如果打开失败dlopen()就返回一个NULL 如果一个函数库被多次打开 它会返回同样的句柄       如果一个函数库里面有一个输出的函数名字为_init 那么_init就会在dlopen()这个函数返回前被执行 我们可以利用这个函数在我的函数库里面做一些初始化的工作 我们后面会继续讨论这个问题的        dlerror()      通过调用dlerror()函数 我们可以获得最后一次调用dlopen() dlsym() 或者dlclose()的错误信息        cha138/Article/program/Oracle/201311/16711

相关参考

知识大全 在Linux创建库函数(2)

在Linux创建库函数(2)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  摘要:和luster

知识大全 LINUX系统中动态链接库的创建与使用

LINUX系统中动态链接库的创建与使用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  大家都知道

知识大全 linux生成(加载)动态库静态库和加载示例方法

  动态库的生成  /*mysumc*/    复制代码代码如下:  #include<stdioh>#includesrch  intsum(intaintb)return(a+b);&

知识大全 Linux 动态函式库解析(一)

Linux动态函式库解析(一)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  摘要:使用动态函式

知识大全 Linux 动态函式库解析(二)

Linux动态函式库解析(二)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  动态连结VS静态联

知识大全 Linux 动态函式库解析(四)

Linux动态函式库解析(四)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  摘要我想各位读者应

知识大全 Delphi for Linux中应用共享对象库

DelphiforLinux中应用共享对象库  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本文

知识大全 微软发布.Net Framework函数库源码

微软发布.NetFramework函数库源码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  微软

知识大全 c语言 用库函数计算两日期相差的天数

c语言用库函数计算两日期相差的天数#include<stdio.h>structdateintyear;intmonth;intday;;intmain(void)intisPrime(i

知识大全 哈希(不可逆)加密通用类库函数

  usingSystem;  usingSystemIO;  usingSystemSecurityCryptography;    namespaceCommon    ///<summar