linux库的生成与使用

来源:互联网 发布:网络推广网站排名 编辑:程序博客网 时间:2024/06/05 01:05
1、静态函数库libxxx.a
----利用静态函数库编译成的文件比较大
----创建静态函数库:利用源文件编译生成的.o文件来创建
----生成命令:ar -cr libname.a test1.0 test2.o (name为库的名字)
ar:静态函数库创建的命令
-c: create的意思
-r: replace的意思。当前有同名的模块名在库中存在。者替换
----静态库的使用:假设生成了个libaddsub.a的静态库,然后main.c需要调用库中实现的接口
    则编译、链接main.c时需要的命令为:gcc -static main.c -L. -laddsub -o main

2、动态函数库(共享库)libxxx.so
----利用动态函数库编译成的文件相对较小
----创建动态函数库:利用源文件编译、链接来创建
----生成命令:gcc -shared -fpic -o libname.so test1.c test2.c
-fpic:产生代码位置无关代码
-shared:生产共享库
----动态库的使用:假设生成了个libaddsub.so的动态库,然后main.c需要调用库中实现的接口
则编译、链接main.c时需要的命令为gcc main.c -L. -laddsub -o main
**注意:此处会出现错误、动态库不能正常使用。解决方法有以下:
(1)最直接的方法:把该动态库拷贝到/usr/lib或者/lib目录下去;
(2)使用LD_LIBRARY_PATH环境变量,此环境变量ubuntu系统中默认是没有的。将以下的语句写入环境变量脚本/etc/profile中:export LD_LIBRARY_PATH=/此处为存放动态库的目录:$LD_LIBRARY_PATH
----动态加载库
用gcc -shared 生成的我们称为动态库(共享库),其中动态库在运行的过程有两种方式
(1).动态链接(动态库的隐式调用):在编译调用库函数代码时指明动态库的位置和名称   ---这种方式,可执行程序只是做一个动态的链接,当需要用到动态库的函数时,有加载气隐士的加载;
(2).动态加载(动态库的显示调用)
---这种方式下,在可执行程序的内部,我们可以用dlopen()函数,手动进行加载,dlopen返回一个句柄作为dlsym()函数的第一个参数,以获得符号在库中的地址。使用这个地址,就可以获得库中特定函数的指针,并且调用装载库中的相应函数。



**************************************************************************注意事项*************************************************************************************
A、由以上编译、链接生成最后的目标文件可知:当动态库和静态库同时存在时,gcc默认使用的是动态库。如果强制使用静态库则需要加-static选项支持
0 0
原创粉丝点击