库是一种软件组件技术,库里面封装了数据和函数。

库的使用可以使程序模块化。
Windows系统包括静态链接库(.lib文件)和动态链接库(.dll文件)。
Linux通常把库文件存放在/usr/lib或/lib目录下。
Linux库文件名由:前缀lib、库名和后缀3部分组成,其中动态链接库以.so最为后缀,静态链接库通常以.a作为后缀。
在程序中使用使用静态库和动态库时,他们载入的顺序是不同的。
静态库的代码在编译时就拷贝的应用程序中,这样的优点是节省编译时间。
动态链接库时程序在开始运行后调用库函数时才被载入。
 
静态库的创建和使用:
1、在一个头文件种声明静态库所导出的函数。
2、在一个源文件种实现静态库所导出的函数。
3、编译源文件,生成可执行代码。
4、将可执行代码所在的目标文件加入到某个静态库中,并将静态库拷贝到系统默认的存放库文件的目录下。
下面通过一个例子来说明:mylib.h种存放的是静态库提供给用户使用的函数的声明,mylib.c实现了mylib.h种声明的函数。
 
头文件:mylib.h
#ifndef _MYLIB_H_
#define _MYLIB_H_
 
void weclome(void);
void outString(const char *str);
 
#endif

源文件:mylib.c

#include "mylib.h"
#include
 
void welcome(void)
{
printf("welcome to libmylib\n");
}
 
void outString(const char *str)
{
if(str != NULL)
printf("%s\n", str);
}

1>编译mylib.c生成目标文件:gcc -o mylib.o -c mylib.c

2>将目标文件加入到静态库中:ar rcs libmylib.a mylib.o
3>将静态库copy到Linux的库目录(/usr/lib或者/lib)下:
cp libmylib.a /usr/lib/libmylib.a 
编写调用库函数的测试程序test.c:
#include "mylib.h"
#include
 
int main(void)
{
printf("create and use library:\n");
welcome();
outString("it's successful\n");
 
return 0;
}

4>使用静态库编译:gcc -o test test.c -lmylib

这里注意,编译时无需带上前缀和后缀。
5>运行可执行程序test: ./test
create and use library:
welcome to libmylib
it's successful

在Linxu下,可以使用ar命令来创建和修改静态库。

这些在linux下man ar一下就可以得到参数,这里说明几个常用的
d:从库中删除成员文件。
r:在库中加入成员文件,若存在,则替换。
c:创建一个库。
s:无论ar命令是否修改了库内容,都强制重新生成库符号表。
其他的命令用时再man。
 
上面这五步是基本的使用,还有需要的话,就要深入的学习了。
 

linux静态库的生成与使用(转)的更多相关文章

  1. Linux静态库生成指南

    Linux静态库生成指南   Linux上的静态库,其实是目标文件的归档文件.在Linux上创建静态库的步骤如下: 写源文件,通过 gcc -c xxx.c 生成目标文件. 用 ar 归档目标文件,生 ...

  2. Linux下动态库和静态库的生成和使用

    1.准备头文件和源文件 hello.h #ifndef HELLO_H #define HELLO_H void hello(const char *name): #endif hello.c #in ...

  3. linux下静态库的生成和使用

    一.静态库概念 1.库是预编译的目标文件(object  files)的集合,它们可以被链接进程序.静态库以后缀为”.a”的特殊的存档(archive file)存储. 2.标准系统库可在目录/usr ...

  4. QT中静态库的生成与使用

    一. 静态库的生成    1. 测试目录: lib    2. 源码文件名: mywindow.h, mywindow.cpp, 类MyWindow继承于QPushButton, 并将文字设置为&qu ...

  5. VS2008 动态库和静态库的生成和加载

    第一:动态库和静态库的生成: 1) 新建一个生成dll工程: 文件->新建->项目->Win32->Win32控制台应用程序 输入项目名称:dllTest ,项目路径:D:\V ...

  6. QT中静态库的生成与使用——创建共享库代码,附例子

    一. 静态库的生成    1. 测试目录: lib    2. 源码文件名: mywindow.h, mywindow.cpp, 类MyWindow继承于QPushButton, 并将文字设置为&qu ...

  7. Linux静态库与动态库制作过程

    文件:tobigchar.c   mian.c   tobigchar.h //tobigchar.c char tos() { char ch; ch = getchar(); if(ch > ...

  8. Linux 静态库(.a)转换为动态库(.so)

    Linux 静态库转换为动态库 参考 http://blog.csdn.net/moxuansheng/article/details/5812410 首先将.a文件转为.so文件是可以实现的 原因是 ...

  9. 关于Linux静态库和动态库的分析

    关于Linux静态库和动态库的分析 关于Linux静态库和动态库的分析 1.什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可运行代码的二进制形式.能够被操作系统加 ...

随机推荐

  1. u Calculate e阶乘相加求和问题

    问题: (n < 10)写个算法 回答: 方法一: #include<stdio.h>  int main()  {      int f[10]={1,1,2,6,24,120,7 ...

  2. Linux下C程序的内存布局

    参考下列书籍中的对应章节: <Linux高级程序设计(第3版)>第3章Linux进程存储管理.相关视频:一.二. <C专家编程>第6章 运动的诗章:运行时数据结构. <U ...

  3. DFS经典题,reachable or not in a 2D maze

    [[0, 0, 0, 0, 0, 1], [1, 1, 0, 0, 0, 1], [0, 0, 0, 1, 0, 0], [0, 1, 1, 0, 0, 1], [0, 1, 0, 0, 1, 0], ...

  4. 【BZOJ-1692&1640】队列变换 后缀数组 + 贪心

    1692: [Usaco2007 Dec]队列变换 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1153  Solved: 482[Submit][St ...

  5. codeforces 723D: Lakes in Berland

    Description The map of Berland is a rectangle of the size n × m, which consists of cells of size 1 × ...

  6. 一款可以下拉搜索html下拉框控件

    直接上图,组件不错,支持静态和动态搜索,这个只是在原控件上自己修改样式后的,这里主要记录一下,在修改别人控件时,应该如何去封装代码: 原控件:http://ivaynberg.github.com/s ...

  7. 数据结构算法C语言实现(六)---2.4一元多项式的表示及相加

    一.简述 利用链表表示稀疏多项式,并基于之前的一些操作(编程实现上还是有所不同的)组合新的操作实现一元多项式的表示及相加. 二.ADT 抽象数据类型一元多项式的定义 ADT Polyomail{ 数据 ...

  8. Swift 吐槽下Swift里一个逼死强迫症的语法:中缀语法

    中缀语法是OC里特有的一种,就是在函数的参数前面加一个解释词,让调用的时候明白该参数的含义 比如: -(void)processDataWithparamaA:(NSString *)paramaA ...

  9. SQLite遇到的关于x64、x86问题

    初次使用SQLite遇到了莫名其妙的问题: 未能加载文件或程序集“System.Data.SQLite, Version=1.0.92.0, Culture=neutral, PublicKeyTok ...

  10. Git连接到Git@OSC

    1.配置本地git $git config --global user.name "xxx" $git config --global user.email "xxxxx ...