`
peizhiinfo
  • 浏览: 1429389 次
文章分类
社区版块
存档分类
最新评论

小白学Linxu之静态库生成和使用

 
阅读更多

Linux下静态库生成和使用

一.静态库概念

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.一个事例:

在程序中调用一个数序库libm.a中sin函数。

#include<stdio.h>

#include<math.h>

int main()

{

double x = 2.0;

doubley = 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”

int main(void)

{

printf(“sum=%d\n”,add(3,5));

return 0;

}

b.tiger.h文件中的内容:

#ifndef__TIGER__

#define__TIGER__

int add(int a,intb);

#endif

c.tiger.c文件中的内容

int add(int a,intb)

{

return a+b;

}

2>创建静态库的最基本步骤是生成目标文件tiger.o

gcc -otiger.o -c tiger.c

3>然后生成静态库libadd.a:

ar -rcslibadd.a tiger.o

其次使用静态库

1>使用gcc命令带上库文件就OK了

gcc -o mainmain.c libadd.a

2> 也可以使用命令”-l库名”进行,库名是不包含库函数库和扩展名的字符串。

gcc -o main main.c-ladd

上面的命令执行完后,系统返回:

Cannot find –ladd

说明:上面的命令将在系统默认的路径西安查找add函数库,并把他链接到要生成的目标程序上。系统提示没有找到库文件add,这是由于add库函数没有在系统默认的查找路径下,我们需要认为指定库函数的路径,例如:库文件和当前编译文件在同一目录下:
gcc -omain main.c-L ./ -ladd

系统就能正常生成可执行文件。

说明:

在使用-l选项时,-o选项的目的名要在-l链接的库名之前,否则gcc会认为-l是生成的目标而出错。

分享到:
评论

相关推荐

    linux 小白 学习

    小白学习linux 操作,简单易学,快速入门,加油学习。

    小白学Linux之gcc的一些常见用法

    本文主要总结了一些学习Linux之gcc的常见用法,希望对你的学习有所帮助。

    小白学SAS 完整版 电子书 带目录 pdf

    小白学SAS 电子工业出版社 人人都能看懂代码和结果;《小白学SAS》内容并非包罗万象,恰恰相反,内容很少,主要涉及三大部分:数据整理、作图和制表。对于SAS软件而言,任何一《小白学SAS》都不可能包括所有内容。越...

    学习LINUX 从小白开始的进阶之路.md

    作为一个跨行业的零基础学者,从刚开始想要通过自学,发现Linux知识体系比较广,自学不知从何下手,于是准备报班线下脱产面授,有老师带着系统学习终归对于小白来说还是友好的,于是在网上找了好多家培训机构,最终...

    小白学习fortran过程记录.zip

    小白学习fortran过程记录.zip小白学习fortran过程记录.zip小白学习fortran过程记录.zip小白学习fortran过程记录.zip小白学习fortran过程记录.zip小白学习fortran过程记录.zip小白学习fortran过程记录.zip小白学习...

    小白编译安装搭建 Linux LAMP环境 详细ppt

    小白编译安装搭建 Linux LAMP环境 详细ppt ; 纯手工安装 ; 做一步,写一部,每个步骤的详情。

    Linux命令大全(完整版)+小白速成+面试必备+学不会来找我.rar

    全套Linux命令详解,入门必备,面试必考,购买后可私聊进学习交流群一起进步!

    小白的linux学习之路-centos7开启VNC远程

    此文为centos7从开启桌面图形化到vnc远程登录设置的...作为一个纯纯的小白,Linux之路满满的坑,满满的泪,此文搜刮了无数先辈的心血和身躯,感谢前辈们的呕心沥血,为前仆后继的菜鸟们铺平前行道路上一个又一个的坑。

    小白学SAS(带目录)

    资源名称:小白学SAS(带目录)内容简介:《小白学SAS》内容并非包罗万象,恰恰相反,内容很少,主要涉及三大部分:数据整理、作图和制表。对于SAS软件而言,任何一《小白学SAS》都不可能包括所有内容。越是包罗万象...

    linux就这么学

    Linux就该这么学》是一本注重于实用性的Linux系统技术自学书籍,自基础篇公布后网站每天日常阅读量已经超过10000多人,25万多名忠实粉丝读者,是目前国内人气增速最快的IT书籍。您可以在本网站内免费在线阅读书籍的...

    小白学 Python 爬虫(25):爬取股票信息

    小白学 Python 爬虫(3):前置准备(二)Linux基础入门 小白学 Python 爬虫(4):前置准备(三)Docker基础入门 小白学 Python 爬虫(5):前置准备(四)数据库基础 小白学 Python 爬虫(6):前置准备(五)爬虫...

    Linux 学习-小白必备-全面笔记.md

    Linux学习

    新手学习Linux入门资料

    鸟哥的私房菜是新手小白学习Linux最合适的一本入门秘籍。能答疑解惑,为我们自学Linux提供极大的帮助,特此分享,

    小白学数据挖掘与机器学习 基于SPSS Modeler实现 含全部数据及模型文件.rar

    小白学数据挖掘与机器学习 基于SPSS Modeler实现 含全部数据及模型文件

    小白必看Python词云生成器详细解析及代码实现

    【小白必看】Python词云生成器详细解析及代码实现, 资源内容是词云图代码文件及相关资源,用于测试代码的实现.【小白必看】Python词云生成器详细解析及代码实现, 资源内容是词云图代码文件及相关资源,用于测试代码的...

    小白入门linux入门到高级全套案例

    Linux入门到高级全套案例

    SAS应用,小白学SAS作者

    SAS应用,小白学SAS作者,医学案例统计分析,医学统计相关,深入浅出,入门必备,适合新手,小白,学习时使用,SAS临床研究必备

    从零开始学linux

    文档内容有关于Linux教学常用的命令,及一些网络管理内容,适合小白学习哦

    PYTHON小白学习教程.zip

    小白必备 ,从0开始学PYTHON教程 ,PYTHON学习教程, 小白必备 ,从0开始学PYTHON教程 ,PYTHON学习教程 小白必备 ,从0开始学PYTHON教程 ,PYTHON学习教程 小白必备 ,从0开始学PYTHON教程 ,PYTHON学习教程 小白...

    小白学Linux之常见的shell命令

    对于许多经常在XP下编程的同学,突然转到Linux下编程会很不习惯,因为以前能在XP下用鼠标完成的很多事情,现在我们都用命令来完成(虽然现在很多Linux操作系统都支持鼠标操作,但是既然学习Linux了,个人认为我们...

Global site tag (gtag.js) - Google Analytics