(本姐的实验代码在这里,不过好像没什么卵用)
1. 函数库
Linux应用程序设计中,用到的外部函数主要由函数库和系统调用提供,函数库按照链接方式的不同,可分为静态链接库和动态链接库两种。
2. 区别
静态链接库:在程序编译时,把库一起链接进程序,最后生成的可执行文件体积变大,但以后就不需要外部提供这个库,切运行速度更快。
动态函数库:在编译时不链接,在程序运行时才把动态库加载到内存中进行调用,生成可执行文件小,但运行速度较静态库慢。
3. 存放库的位置
一般位于这么几个地方:/lib /usr/lib “.so”为动态库,而“.a”则为静态库
4.编译选项
Linux在进行链接时,默认链接动态库,若需要使用静态库,需要加入编译选项[-static],如:gcc -static test.c -o test。
(用“readelf -d” 可查看可执行程序需要用到的动态库 ,当然,这个命令只能查看动态库而无法查看静态库)
RHEL6中默认不提供lib.a(也就是静态C库),若在编译程序的时候需要用到则要另外进行安装glibs-static-2.12-1.80.el6.i686,运行
rpm -ivh glibc-static-2,12-1.80.el6.i686即可。(这个压缩包需要另外下载,在RHEL6光盘中是不提供的)
5. 静态函数库的制作方法及用法,参照如下几行代码:
gcc -c mylib.c -o mylib.o
ar cqs libmylib.a mylib.o
cp libmylib.a /usr/lib/
gcc -static test.c -lmylib -o test
6. 动态函数库的制作方法如下:
gcc -c mylib.c -o mylib.o
gcc -shared -fPIC mylib.o -o libmylib.so /* [-fPIC] 按照可重定位地址方式生成输出对象 */
/* [-sharde] 指明产生动态链接库 */
cp libmylib.so /usr/lib