linux 下创建静态库和动态库

来源:互联网 发布:hgame推荐 知乎 编辑:程序博客网 时间:2024/05/22 09:02

4.生成库文件

  • 概述

编写函数代码

编译生成各目标文件

ar文件对目标文件归档,生成静态库文件。注意归档文件名必须以lib打头(可查看库文件命名规则)。


使用要点:

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

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

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

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


  • 编写最简单的源文件

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

myalib.h //静态库头文件

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

//myalib.hvoidtest();//myalib.c#inlcude<stdio.h>voidtest(){printf("test\n");}

  • 制作静态库文件

生成目标文件


gcc-c myalib.c

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


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

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

ar-rc libtest.a myalib.o

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


  • 使用静态库文件

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

//main.c#include"myalib.h"intmain(int argc,char* argv[]){test();return0;}


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

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

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


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

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


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


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

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


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

main.o(.text+0x11):In function `main':

:undefined reference to `test'

collect2:ld returned 1 exit status


执行可执行文件查看效果

执行./main,输出

test

说明执行成功。


  • 生成动态库文件

gcc-fPIC --shared test.c -o libtest.so

生成libtest.so


  • 使用动态库文件

编译可执行文件

gccmain.c -o main -I./ -L./ -ltest

指定加载库的路径,后面会详细介绍。

exportLD_LIBRARY_PATH=./:$LD_LIBRARY_PATH


执行./main,输出

test

说明执行成功。


5.库文件命名

GNU库的使用必须遵守LibraryGNU PublicLicense(LGPL许可协议)。该协议与GNU许可协议略有不同,开发人员可以免费使用GNU库进行软件开发,但必须保证向用户提供所用的库函数的源代码。

系统中可用的库都存放在/usr/lib/lib目录中。库文件名由前缀lib和库名以及后缀组成。根据库的类型不同,后缀名也不一样。共享库的后缀名由.so和版本号组成,静态库的后缀名为.a


静态库的名字一般为libxxxx.a,其中xxxx是该lib的名称

动态库的名字一般为libxxxx.so.major.minorxxxx是该lib的名称,major是主版本号,minor是副版本号


原创粉丝点击