Linux下静态库与动态库的使用
来源:互联网 发布:叮叮软件下载 编辑:程序博客网 时间:2024/05/16 02:02
Linux下静态库与动态库的使用
Linux下有静态链接库和动态链接库两种,静态链接库的后缀名是.a,动态链接库的后缀名是.so,下面详细介绍:
静态链接库:
静态链接库是指程序在编译链接的过程中就把依赖的库插入到程序中,这样程序的运行就不需要这些库的支持,但缺点是文件变大,下面以一个例子介绍如何制作静态链接库:
有add.c和mul.c两个文件,分别实现两数相加与相乘:
add.c:
- int my_add(int num1, int num2)
- {
- return num1 + num2;
- }
int my_add(int num1, int num2){ return num1 + num2;}
mul.c:
- int my_mul(int num1, int num2)
- {
- return num1 * num2;
- }
int my_mul(int num1, int num2){ return num1 * num2;}
还有一个computer.h头文件,声明了上面两个函数:
- int my_add(int num1, int num2);
- int my_mul(int num1, int num2);
int my_add(int num1, int num2);int my_mul(int num1, int num2);
还有一个main.c文件调用这两个函数:
- #include <stdio.h>
- #include "compute.h"
- int main()
- {
- int a=3, b=5;
- printf("%d + %d = %d\n", a, b, my_add(a, b));
- printf("%d * %d = %d\n", a, b, my_mul(a, b));
- return 0;
- }
#include <stdio.h>#include "compute.h"int main(){ int a=3, b=5; printf("%d + %d = %d\n", a, b, my_add(a, b)); printf("%d * %d = %d\n", a, b, my_mul(a, b)); return 0;}
- gcc -o add.a -c add.c -static
- gcc -o mul.a -c mul.c -static
- ar -rc libcompute.a add.a mul.a
gcc -o add.a -c add.c -staticgcc -o mul.a -c mul.c -staticar -rc libcompute.a add.a mul.a上面首先把add.c和mul.c编译成两个独立的.a文件,然后把他们合并成一个静态链接库libcompute.a(当然你也可以把它们做成两个静态链接库,连接main的时候指定这两个就可以了)。static表示编译成静态链接库。ar是一个打包命令。
现在静态链接库libcompute.a做好了,下面我们把它插入到main.c中:
- gcc -o main main.c -lcompute -L.
gcc -o main main.c -lcompute -L.上面的-lcomputer表示要链接的静态链接库是libcomputer.a,-L.表示在当前目录下寻找。
为了方便,我们把上面的命令写在一个Makefile里:
Makefile:
- all:
- gcc -o main main.c -lcompute -L.
- lib:
- gcc -o add.a -c add.c -static
- gcc -o mul.a -c mul.c -static
- ar -rc libcompute.a add.a mul.a
- clean:
- rm -f *.o *.a main
all:gcc -o main main.c -lcompute -L.lib:gcc -o add.a -c add.c -staticgcc -o mul.a -c mul.c -staticar -rc libcompute.a add.a mul.aclean:rm -f *.o *.a main
首先:make lib 生成静态链接库
然后:make 生成最终的main可执行文件
这样就可以了,运行main,正确输出结果了:
- 3 + 5 = 8
- 3 * 5 = 15
3 + 5 = 83 * 5 = 15
Makefile:
- all:
- gcc -o main main.c -ladd -lmul -L.
- lib:
- gcc -o libadd.a -c add.c -static
- gcc -o libmul.a -c mul.c -static
- clean:
- rm -f *.o *.a main
all:gcc -o main main.c -ladd -lmul -L.lib:gcc -o libadd.a -c add.c -staticgcc -o libmul.a -c mul.c -staticclean:rm -f *.o *.a main
当然为了简便,我们可以只运行一个命令就搞定所有的事情:
Makefile:
- all: lib
- gcc -o main main.c -lcompute -L.
- lib:
- gcc -o add.a -c add.c -static
- gcc -o mul.a -c mul.c -static
- ar -rc libcompute.a add.a mul.a
- clean:
- rm -f *.o *.a main
all: libgcc -o main main.c -lcompute -L.lib:gcc -o add.a -c add.c -staticgcc -o mul.a -c mul.c -staticar -rc libcompute.a add.a mul.aclean:rm -f *.o *.a main只要一个make命令就搞定了~~
动态链接库:
完成!
来源:http://blog.csdn.net/htttw/article/details/7269485
- Linux下静态库与动态库的使用
- Linux下静态库与动态库的使用
- Linux下静态库与动态库的使用
- Linux下静态库与动态库的使用
- Linux下动态库、静态库的生成与使用
- linux使用下使用动态与静态库
- Linux下的动态链接库与静态链接库的生成与使用
- 聊聊Linux下的静态库与动态库的生成与使用
- Linux下静态库与动态库的生成与使用
- linux下的静态库与动态库的区别
- linux下的静态库与动态库的区别
- Linux下的动态库与静态库的制作
- linux下动态库与静态库
- Linux下动态库与静态库
- Linux下动态库与静态库
- Linux下静态库与动态库
- Linux下动态库与静态库
- Linux下静态库与动态库
- Servlet用法配置,以及jsp为什么是一个Servlet
- mac os x 10.8感受
- readelf命令的使用
- Linux 登录Mysql 并导入表脚本
- objdump命令的使用
- Linux下静态库与动态库的使用
- paip..net代码生成器使用总结
- java 对象之间属性值复制
- gcc -I -L -l区别
- View 编程(0): 认识 LayoutInflater
- 建立一个线性表,依次从键盘输入的正整数,然后依次输出(一个简单参考事例)
- el表达式的字符串中包含el表达式写法
- Android矩阵原理详解(Matrix,ColorMatrix)
- 获取Android的Java源代码并在Eclipse中关联查看的最新方法