简介Linux静态库知识

运维 系统运维
对于Linux系统你了解么?目前,Linux系统越来越受到电脑用户的欢迎,于是很多人开始学习Linux时,在这期间,你可能会遇到Linux静态库的编写和使用问题,这里将介绍Linux静态库的编写和使用问题的解决方法,在这里拿出来和大家分享一下。

对于Linux系统你了解么?目前,Linux系统越来越受到电脑用户的欢迎,于是很多人开始学习Linux时,在这期间,你可能会遇到Linux静态库的编写和使用问题,这里将介绍Linux静态库的编写和使用问题的解决方法,在这里拿出来和大家分享一下。

1、概述

静态库文件的扩展名一般为.a,其编写步骤很简单。

⑴编写函数代码

⑵编译生成各目标文件

⑶用ar文件对目标文件归档,生成静态库文件。

 注意归档文件名必须以lib打头。

使用要点:

⑴在gcc 的-I参数后加上静态库头文件的路径。

⑵在gcc 的-L参数后加上库文件所在目录

⑶在gcc 的-l参数后加上库文件名,但是要去掉lib和.a扩展名。

比如库文件名是libtest.a 那么参数就是 -l test

2、编写最简单的静态库文件

编写如下两个文件,注意放在同一目录中

 myalib.h//静态库头文件

myalib.c//静态库实现文件

//myalib.h 文件的内容

void test();

//myalib.c 文件的内容

  1. #inlcude <stdio.h> 
  2. void test()  
  3. {  
  4. printf("test\n");  

3、制作库文件

⑴生成目标文件

gcc -c myalib.c

执行完后会生成一个myalib.o文件

⑵用ar命令归档,格式为ar -rc <生成的档案文件名> <.o文件名列表>

再次提醒,归档文件名一定要以lib打头, .a结尾。

ar -rc libtest.a myalib.o

执行完后会生成一个libtest.a文件

4、使用库文件

⑴编写一个测试程序main.c,内容为

//main.c 测试静态库调用的程序

#include "myalib.h"//要把函数的头文件包含进来,否则编译时会报错

  1. int main(int argc,char* argv[])  
  2. {  
  3. test();  
  4. return 0;    

⑵编译目标文件,注意要把静态库头文件的路径加到-I参数里面

gcc -I /root/exercise -o main.o -c main.c

现在生成了一个main.o文件

⑶生成可执行文件,注意要把静态库文件的路径加到-L参数里面,

把库文件名(去掉打头的lib和结尾的.a)加到-l参数后面。如下面所示

gcc -o main -L/root/exercisemain.o -ltest

此时就会生成一个名为main的可执行文件

另外,注意- l参数好象应该加到输入文件名的后面,否则会报错。

比如gcc -o main -L/root/exercise-ltest main.o就会提示

  1. main.o(.text+0x11): In function `main':  
  2. : undefined reference to `test'  
  3. collect2: ld returned 1 exit status 

原因我还不清楚:-)

⑷执行可执行文件查看效果

执行./main, 输出

test

说明执行成功。以上就是Linux静态库的编写和使用的简介。

【编辑推荐】

  1. 配置笔记:Linux配置DNS服务器
  2. 讲解RedHat Linux 5显示中文的方法
  3. 教会你Redhat Enterprise Linux关闭SELinux
  4. 轻松完成Linux安装KDE软件包
  5. 阐述Redhat Linux配置远程桌面
责任编辑:小霞 来源: CSDN
相关推荐

2010-06-02 13:03:20

MySQL数据库

2009-12-23 16:35:12

Linux系统光驱软

2010-03-04 10:17:57

Linux动态库

2009-06-11 09:24:59

NetBeans入门

2021-01-19 10:52:15

知识图谱

2010-01-07 17:40:41

Linux动态库

2015-11-16 10:34:19

Linux动态库总结

2009-08-20 14:28:00

C#静态构造函数

2022-07-12 13:23:59

静态链接库可执行文件C 目标文件

2021-07-11 06:45:18

Linux内核静态

2009-09-27 11:07:22

CCNA知识静态路由

2011-09-16 10:13:02

Emacs

2010-04-21 18:17:01

Unix配置协议

2011-08-24 13:10:48

MongoDBUpdate

2021-04-22 06:15:59

Linux静态链接动态库

2011-07-05 10:44:51

Qt Sqlite 静态编译

2010-04-23 14:12:37

Aix操作系统

2010-09-25 11:13:18

JVMClassLoader

2009-06-26 13:56:20

UML面向对象建模

2021-07-21 09:15:57

Python工具编程语言
点赞
收藏

51CTO技术栈公众号