1、 linux 下有关函数库的概念
a、静态库 :静态库在编译时就已连接到应用程序中
b、共享库 :共享库在程序运行时才载入到应用程序中
c、动态库 : 动态库是在函数调用时载入到应用程序中
2、linux 中的库文件的命令是由前缀 lib 和库的名称以及后缀组成的,库的类型不同,相应有后缀也不同。共享库一般形式是: libname.so.major.minor, 其后缀名由 .so 及版本号组成;name 是库的名称,用来唯一的标识这个库, name 可以是一个单字,几个字符,甚至一个字母。如数学共享库的名字为 libm.so.5 ;静态库的一般形式为 libname .a,
其后缀名为 .a ,name 是库名,其含义与共享库是一致 的。
3、 用gcc 创建函数库
假如原函数的名字为 myfun.c 要生成的库为 libmy.so ;可以用这个语句来生成一个符合条件的共享库:gcc -shared -fPIC -W myfun.c -o libmy.so
有关参数的解释如下:
-shared -------------编译产生共享库
-fPIC ----------------- 在编译产生共享库的时候做一些优化, 可以不加
-W ------------------- 输出警告信息,可以不加
-o ---------------------- 设定输出文件名(库名)
如果要在另一个程序(假定为 myfun1.c) 中引用刚才生成的库 libmy.so ,则可以使用这个语句: gcc myfun1.c -o myfun1 -lmy ; -l 的意思就是设定要连接的库。
4、 存放路径
一般来说,linux 下的大部分共享库都存放在 /lib , /user/lib 目录下。有一些库可能存放在特定的目录中,在 /etc/ld.so.conf 配置中有这些目录的列表。GCC在默认情况下,将只在 /etc/ld.so.conf 中指定的目录中寻找库。当然我们也可以把库放在自己的目录下,然后在引用时用Gcc 的 -Ldir 选项来指定目录即可。
5 、如下所示:
//fun1.c
#include <stdio.h>
void prt(char * str)
{
printf("%s \n",str);
}
用下面的命令生成共享库并自制到 /lib 目录下: gcc -shared -fPIC fun1.c -o libmy.so
引用这个库的文件名为 fun2.c
extern void prt(char *) ;
main()
{
prt(" xiaodan ,I love U ");
}
用这个命令来产生可执行代码: gcc fun2.c -o fun2 -lmy
执行 ./fun2 后输出 xiaodan ,I love U
6、特殊的函数库
如果在一个库中的函数同时要调用该库中的函数时,就在被调用函数前加以说明 如下所示:Beta 调用 Gamma
float beta(float z,float w)
{
extern float gamma(float);
return exp(gamma(z) + gamma(w) - gamma(z + w));
}
如果引用了几个函数就要分别的加以说明
7、结束