这里将介绍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 文件的内容
#inlcude <stdio.h>
void test()
{
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"//要把函数的头文件包含进来,否则编译时会报错
int main(int argc,char* argv[])
{
test();
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就会提示
main.o(.text+0x11): In function `main':
: undefined reference to `test'
collect2: ld returned 1 exit status
原因我还不清楚:-)
⑷执行可执行文件查看效果
执行./main,输出
test
说明执行成功。
以上就是Linux静态库的编写和使用的简介。