"); //-->
1.库是预编译的目标文件(object files)的集合,它们可以被链接进程序。静态库以后缀为”.a”的特殊的存档(archive file)存储。
2.标准系统库可在目录/usr/lib与/lib中找到。比如,在类Unix系统中C语言的数序库一般存储为文件/usr/lib/libm.a。该库中函数的原型声明在头文件/usr/include/math.h中。
3.C标准库本身存储为/usr/lib/libc.a,它包含ANS1/ISO标准指定的函数,比如printf。对每一个C程序来说,libc.a都默认被链接。
4.一个事例:
在tiger.c程序中调用一个数学库libm.a中sin函数。
#include<stdio.h>#include<math.h>int main()
{ double x = 2.0; double y = sin(x);
printf(“the result:%f\n”,y); return 0;
}
如果直接使用gcc tiger.c则会出现错误:
undefined reference to ‘sin’;
1>函数sin(),未在本程序中定义也不在默认库’libc.a’中,除非被指定,编译器也不会链接’libm.a’。
2>为使编译器能将sin()链接进主程序‘test.c’,需要提供数学库’libm.a’.。
3>使用方法:
gcc tiger.c /usr/lib/libm.a -o tiger
则可以编译通过。为了避免在命令行中指定长的路径,编译器为链接函数库提供了快捷的选项“-l”。因此可以使用下面的方法:
gcc tiger.c -lm –o tiger
注:选项-lNAME使用连接器尝试链接系统库目录中的函数库文件libNAME.a。
二.生成和使用静态库
1.静态库是obj文件的一个集合,通常静态库以”.a”为后缀。静态库由程序ar生成。
2.静态库的优点是可以在不用重新编译程序库代码的情况下,进行程序的重新链接,这种方法节省了编译过程的时间(在编译大型程序的时候,需要花费很长的时间)。静态库的另一个优点是开发者可以提供库文件给使用的人员,不用开放源代码,这是库函数提供者经常采用的手段。
3.通过一个实例来了解如何自己生成静态库和使用静态库
首先生成静态库
1>在test文件夹下有三个文件:main.c ,tiger.c,tiger.h;
a. main.c文件中的内容:
#include<stdio.h>#include”tiger.h” //注意include该文件,并不是仅链入.a文件即可int main(void)
{
printf(“sum=%d\n”,add(3,5)); return 0;
}b.tiger.h文件中的内容:
#ifndef __TIGER__#define __TIGER__int add(int a,int b);#endif
c.tiger.c文件中的内容
int add(int a,int b)
{ return a+b;
}2>创建静态库的最基本步骤是生成目标文件tiger.o
gcc -o tiger.o -c tiger.c
3>然后生成静态库libadd.a:
ar -rcs libadd.a tiger.o
其次使用静态库
1>使用gcc命令带上库文件就OK了
gcc -o main main.c libadd.a
2> 也可以使用命令”-l库名”进行,库名是不包含库函数库和扩展名的字符串。
gcc -o main main.c -ladd
上面的命令执行完后,系统返回:
Cannot find –ladd
说明:上面的命令将在系统默认的路径西安查找add函数库,并把他链接到要生成的目标程序上。系统提示没有找到库文件add,这是由于add库函数没有在系统默认的查找路径下,我们需要认为指定库函数的路径,例如:库文件和当前编译文件在同一目录下: gcc -o main main.c -L ./ -ladd
系统就能正常生成可执行文件。
说明:
在使用-l选项时,-o选项的目的名要在-l链接的库名之前,否则gcc会认为-l是生成的目标而出错。
原文:
https://blog.csdn.net/tigerjibo/article/details/6989689
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
中国科技巨头豪掷千亿元抢购H20!英伟达却犯了难
全球首发,复旦大学团队研制二维半导体芯片“无极”
模糊控制在尾砂胶结充填过程控制中的应用
马斯克或将重心回归特斯拉 周三股价应声大涨5%
Nanopower在智能家居中的应用指南
W296同步工作同时提供三路电源的应用电路
s3c44b0x 和HY5764160的问题。
W296构成的外围元器件最少的5V/4A应用电路
W296构成的输出l2V/10A的扩流应用电路
连接IP世界,建立生态环境
可调谐RF趋势
▲纯HTML型空间 适合个人用户、小型企业快速低成本地创建网上家园!
模块化宽带视频切换矩阵的关键技术研究
▲纯HTML型空间 适合个人用户、小型企业快速低成本地创建网上家园!
采用W296作预稳压电源的应用电路
2EP1XXR系列全桥变压器驱动器工作原理(一)——如何通过占空比调节峰值整流应用下的输出电压
汽车ADAS(先进驾驶员辅助系统)动向
低功耗技术用于IC、封装及其PCB
模糊自动加药监控系统的开发与应用
windnet PPPOE安装以后?
模块化联合码率控制技术
电力电子脉宽调制PWM:绿色能源的幕后英雄
两种不同接法构成重置功能的应用电路(W296)
喧闹的SEMICON背后:设备厂举杯欢庆 晶圆厂沉默不言
Intel怎么追!台积电完美搞定2nm 扭头就冲向1.4nm
硅MEMS:加速时序市场创新
某新型飞机机载数字视频记录仪的设计与实现
深圳国际半导体展覆盖半导体完整产业链,即刻登记参观领会刊!
应该怎样学习嵌入式???有什么入门的书籍??要准备什么???
特朗普新关税,印度越南无一幸免,苹果盘后重挫超7%