动态库

什么是动态库

动态库是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。动态链接提给了一种方式,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个DLL中,该DLL包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL还有助于共享数据和资源。多个应用程序可同时访问内存中单个DLL副本的内容。DLL是一个包含可由多个程序同时使用的代码和数据的库。Windows下动态库为.dll后缀,在linux在为.so后缀。

动态库解读

(一)存放内容

(1)系统运行历程中所产生的所有信息

(2)原始数据:包含用户输入的信息、推理的中间结果和推理历程的纪录

(二)作用

动态库中由各种事实、命题和关系组成的状态,既是推理机选用知识的依据,也是解释机制获得推理路径的来源。

(三)编译

生成动态连接库,假设名称为libtest.so

gcc x.cy.cz.c-fPIC-shared-olibtest.so

将main.c和动态连接库实行连接生成可执行文件

gcc main.c-L.-ltest-omain

输出LD_LIBRARY_PATH环境变量,一边动态库装载器能够找到需要的动态库

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.

测试是否动态连接,如果列出libtest.so,那么应该是连接正常了

ldd main

(四)后缀名含义

(1)-fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足区别进程的需要,而不能达到真正代码段共享的目的。

(2)-L.:表示要连接的库在当前目录中

(3)-ltest:编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.so来确定库的名称

(4)LD_LIBRARY_PATH:这个环境变量指示动态连接器可以装载动态库的路径。

当然如果有root权限的话,可以修改/etc/ld.so.conf文件,然后调用 /sbin/ldconfig来达到同样的目的,不过如果没有root权限,那么只能采用输出LD_LIBRARY_PATH的方式了。

郑重声明:东方财富网发布此信息的目的在于传播更多信息,与本站立场无关。东方财富网不保证该信息(包含但不限于文字、数据及图表)全部或者部分内容的准确性、真实性、完整性、有效性、及时性、原创性等。相关信息并未经过本网站证实,不对您构成任何投资建议,据此操作,风险自担。

扫一扫下载APP

扫一扫下载APP
信息网络传播视听节目许可证:0908328号 经营证券期货业务许可证编号:913101046312860336 违法和不良信息举报:021-61278686 举报邮箱:jubao@eastmoney.com
沪ICP证:沪B2-20070217 网站备案号:沪ICP备05006054号-11 沪公网安备 31010402000120号 版权所有:东方财富网 意见与建议:4000300059/952500