Linux下静态库生成和使用


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;

         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
  • 2
  • 下一页

相关内容