Linux 下创建和使用用户函数库

时间:2021-07-29 09:50:32


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、结束Linux 下创建和使用用户函数库