linux动态库及静态库的制作和makefile的简单编写
来源:互联网 发布:链轮设计软件 编辑:程序博客网 时间:2024/06/05 04:07
一.库
什么是库,简单的可以说是可执行代码的二进制形式,能够被操作系统载入内存执行。操作系统的不同,二者的库也是不兼容的,如windows与linux.
库又分为静态库和动态库,动态库又称为共享库。linux下静态库(.a)文件,动态库(.so)文件。主要存放函数库的路径有:/lib , /usr/lib.
二.静态库与动态库
1.静态库
这类库的名字一般是libname.a.利用静态库编写的文件比较大,原因是整个函数库中的数据都被整合进目标代码文件中去。它的优点是,编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进可执行文件了。同样它的不足,如果静态函数库改变了,那么你的程序必须重新编译,而且体积也较大。
2.动态库
名字一般是libname.so.相对于静态函数库,动态函数库在编译的时候并没有被编译进目标代码中,你的程序执行到相关函数是菜调用函数库里的函数,因此动态函数库所产生的可执行文件比较小。由于函数库没有被整合进你的程序,而是程序运行时动态申请并调用,所以程序的运行环境中必须提供相应的库。动态函数库的改变并不影响你的程序,所以动态函数库的升级比较方便。而且如果多个应用程序都要使用同一函数库,动态库就非常适合,可以减少应用程序的体积。
三.库的创建
静态库的创建
gcc -c filen.c
ar -cr libname.a file1.o file2.o 。。
动态库的创建
gcc -shard -fpic -o libname.so test1.c test2.c ....
-fpic:产生代码位置无关代码-shared 生成一个共享库
四.实际操作
动态库的创建
gcc -shard -fpic -o libname.so test1.c test2.c ....
-fpic:产生代码位置无关代码-shared 生成一个共享库
四.实际操作
1.编写三个简单函数ADD.c SUB.c MUL.c如下
ADD.c
#include <stdio.h>
int ADD(int a, int b)
{
return a+b;
}
SUB.c
#include <stdio.h>
int SUB(int a ,int b)
{
return a-b;
}
SUB.c
#include <stdio.h>
int SUB(int a ,int b)
{
return a-b;
}
MUL.c
#include <stdio.h>
int MUL(int a , int b)
{
return a*b;
}
和一个头文件 fun.h
#ifdef __FUN_H_
#define __FUN_H_
extern ADD(int a , int b);
extern SUB(int a , int b);
extern MUL(int a , int b);
#endif
以及一个main函数main.c
main.c
#include <stdio.h>
#include <fun.h>
int main (void)
{
int a=5;
int b=10;
printf("a=5,b=10\n");
printf("a+b=%d\n",ADD(a,b));
printf("a-b=%d\n",SUB(a,b));
printf("a*b=%d\n",MUL(a,b));
return 0;
}
}
其中main.c 放在~/app下 fun.h ADD.c SUB.c MUL.c放在~/src下
2.生成静态库
[hongfuhao@localhost src]$ ls
ADD.c fun.h makefile MUL.c SUB.c
[hongfuhao@localhost src]$ gcc -c *.c
[hongfuhao@localhost src]$ ls
ADD.c ADD.o fun.h makefile MUL.c MUL.o SUB.c SUB.o
[hongfuhao@localhost src]$ ar -cr libfun.a *.o
[hongfuhao@localhost src]$ ls
ADD.c ADD.o fun.h libfun.a makefile MUL.c MUL.o SUB.c SUB.o
上中libfun.a即是一个静态库
生成动态库
hongfuhao@localhost src]$ ls
ADD.c ADD.o fun.h libfun.a makefile MUL.c MUL.o SUB.c SUB.o
[hongfuhao@localhost src]$ gcc -shared -fpic -o libfun.so *.c
[hongfuhao@localhost src]$ ls
ADD.c ADD.o fun.h libfun.a libfun.so makefile MUL.c MUL.o SUB.c SUB.o
- linux动态库及静态库的制作 和makefile 的简单编写
- linux动态库及静态库的制作和makefile的简单编写
- linux下动态库和静态库的制作、寻找、比较及相关Makefile的编写
- Linux动态库与静态库以及简单makefile的编写
- 通用的makefile,制作动态库和静态库
- linux 生成和使用动态链接库和静态链接库的Makefile编写
- linux 生成和使用动态链接库和静态链接库的Makefile编写
- linux 生成和使用动态链接库和静态链接库的Makefile编写
- linux 生成和使用动态链接库和静态链接库的Makefile编写
- Linux 静态库动态库 Makefile 制作
- 静态库的创建和编写makefile
- linux下静动态库Makefile的编写和应用
- linux编译动态库和静态库的makefile示例
- linux编译动态库和静态库的makefile示例
- GCC 编译动态链接库和静态链接库 + 大型工程Makefile编写 + Linux环境变量的设置和查看方法
- Linux 动态和静态库(.so & .a)的Makefile模板
- Linux静态库和动态库的编写和使用
- Linux静态库和动态库的编写和使用
- UICollectionView拾遗
- 数据结构课下复习1
- swust.oj.1075
- 飞翔nyoj195
- Lightoj1111——Best Picnic Ever(dfs)
- linux动态库及静态库的制作和makefile的简单编写
- [LintCode]Maximum Subarray III
- Android 唯一设备号生成方案
- 机器学习中各种距离
- 事件的绑定与解绑
- JNI学习积累之一 ---- 常用函数大全
- 重启docker服务器后 遇到 'device or resource busy'错误
- 直接插入排序
- 结构体嵌套二级指针