自己动手写linux静态库文件
2012-07-24 20:22
309 查看
一、概述
1、库文件分为动态库和静态库,在linux下动态库以.so结尾,静态库以.a结尾,但二者都是以lib开头。
2、动态库与静态库的区别在于:如果程序是在编译时加载库文件的,就是使用了静态库。如果是在运行时加载目标代码,就成为动态库。换句话说,如果是使用静态库,则静态库代码在编译时就拷贝到了程序的代码段,程序的体积会膨胀。如果使用动态库,则程序中只保留库文件的名字和函数名,在运行时去查找库文件和函数体,程序的体积基本变化不大。
二、静态库的编写
静态库的编写有两种类型:
类型一:不带头文件的库
A.具体步骤:
a.编写函数代码
b.将A中所编写的函数编译生成目标文件,即.o文件。gcc编译命令为:gcc -c filename
c.利用ar命令对B所得的目标文件归档,生成静态库文件。注意:库文件的名字必须以lib开头,以.a结尾
B.示例程序文件:
//mylib.c
#include<stdio.h>
void myLibFun()
{
printf("my static lib called\n");
}
//test.c
#Include<stdio.h>
int main()
{
myLibFun();
return 0;
}
C.静态库的生成与使用
1.生成目标文件
gcc -c mylib.c
得到一个mylib.o文件
2.用ar命令归档,格式为ar
-rc <生成的档案文件名> <.o文件名列表>
ar -rc libtest.a mylib.o
执行完后会生成一个libtest.a文件
3.静态库文件的调用
编译目标文件,注意将静态库的搜索路径加到-L参数里面,把库文件名(去掉打头的lib和结尾的.a)加到-l参数后面。
gcc test.c -o test -L /home/origin -ltest
此时就会生成一个名为test的可执行文件。
执行./test,输出:
my
static lib called
成功了!
三.带头文件的静态库
基本上与上面的一样,但是会有一些区别(红色标注部分)
//mylib.h
void test();
//mylib.c
#inlcude <stdio.h>
void myLibFun()
{
printf("my static lib called\n");
}
//test.c
#Include<stdio.h>
int main()
{
myLibFun();
return 0;
}
静态库的生成与使用:
gcc -c mylib.c
ar -rc libtest.a mylib.o
gcc test.c -o test
-l
/home/origin
-L /home/origin -ltest //静态库头文件的路径加到-I参数里面
./test
输出:my static lib
called
1、库文件分为动态库和静态库,在linux下动态库以.so结尾,静态库以.a结尾,但二者都是以lib开头。
2、动态库与静态库的区别在于:如果程序是在编译时加载库文件的,就是使用了静态库。如果是在运行时加载目标代码,就成为动态库。换句话说,如果是使用静态库,则静态库代码在编译时就拷贝到了程序的代码段,程序的体积会膨胀。如果使用动态库,则程序中只保留库文件的名字和函数名,在运行时去查找库文件和函数体,程序的体积基本变化不大。
二、静态库的编写
静态库的编写有两种类型:
类型一:不带头文件的库
A.具体步骤:
a.编写函数代码
b.将A中所编写的函数编译生成目标文件,即.o文件。gcc编译命令为:gcc -c filename
c.利用ar命令对B所得的目标文件归档,生成静态库文件。注意:库文件的名字必须以lib开头,以.a结尾
B.示例程序文件:
//mylib.c
#include<stdio.h>
void myLibFun()
{
printf("my static lib called\n");
}
//test.c
#Include<stdio.h>
int main()
{
myLibFun();
return 0;
}
C.静态库的生成与使用
1.生成目标文件
gcc -c mylib.c
得到一个mylib.o文件
2.用ar命令归档,格式为ar
-rc <生成的档案文件名> <.o文件名列表>
ar -rc libtest.a mylib.o
执行完后会生成一个libtest.a文件
3.静态库文件的调用
编译目标文件,注意将静态库的搜索路径加到-L参数里面,把库文件名(去掉打头的lib和结尾的.a)加到-l参数后面。
gcc test.c -o test -L /home/origin -ltest
此时就会生成一个名为test的可执行文件。
执行./test,输出:
my
static lib called
成功了!
三.带头文件的静态库
基本上与上面的一样,但是会有一些区别(红色标注部分)
//mylib.h
void test();
//mylib.c
#inlcude <stdio.h>
void myLibFun()
{
printf("my static lib called\n");
}
//test.c
#Include<stdio.h>
int main()
{
myLibFun();
return 0;
}
静态库的生成与使用:
gcc -c mylib.c
ar -rc libtest.a mylib.o
gcc test.c -o test
-l
/home/origin
-L /home/origin -ltest //静态库头文件的路径加到-I参数里面
./test
输出:my static lib
called
相关文章推荐
- linux下生成自己的静态库文件
- 在Linux/Unix下把自己写的函数做成静态、动态库文件
- 自己动手写CSDN博客提取器,提取文件保存支持PDF、doc、txt三种格式
- 自己动手写一个 iOS 网络请求库(NSURLSession 初探、封装接口、降低耦合、快速文件上传 )
- 自己动手做QQ特洛伊-文件绑定篇【一】
- 在Ubuntu13.10上自己动手搭建交叉编译环境arm-linux-gcc-4.8.2
- 10004.自己动手打造嵌入式Linux软硬件开发环境
- 【自己动手写类加载器2】覆盖findClass(String name)方法,删除bin目录下的加密的class文件
- linux中的ELF文件有哪几类?(注意:静态库不是ELF文件)
- 《自己动手写Docker》书摘之二---Linux Cgroups介绍
- [转]自己动手打造嵌入式Linux软硬件开发环境
- 自己动手修改宇宙无敌之Slickedit的文件切换标签栏
- 自己动手一步步安装Linux系统
- 【原创】分布式之缓存击穿 【原创】自己动手实现静态资源服务器 【原创】自己动手实现JDK动态代理
- 【转载】自己动手打造嵌入式Linux软硬件开发环境
- Linux下nginx支持.htaccess文件实现伪静态的方法!
- 自己动手写一个 iOS 网络请求库(四)——快速文件上传
- 自己动手设计并实现一个linux嵌入式UI框架
- 自己动手写ehcache工具类和配置文件ehcache.xml
- compute节点 Linux bridge agent状态xxx但是自己计算节点配置文件又确定没有问题