转载:https://blog.csdn.net/u012592062/article/details/51942026

linux操作系统中:
1.静态库是一些目标文件(后缀名为.o)的集合体而已。
2.静态库的后缀名是.a,对应于windows操作系统的后缀名为.lib的静态库。
3.可以使用ar命令来创建一个静态库文件。
来看一个实例,根据书中的代码简化的,先看一看可以编译成库文件的源文件中的代码:

[cpp]  view plain   copy
  print ?
  1. /*  test.c  */  
  2. int f()   
  3. {  
  4.   return 3;  
  5. }  

代码非常简单,只有一句话。我们敲入如下命令:
gcc –c test.c
ar cr libtest.a test.o
会在当前目录下生成一个libtest.a静态库文件。-c表示只编译,不链接。再来看一看如何使用这个库。如下代码:

[cpp]  view plain   copy
  print ?
  1. /*  app.c   */  
  2. #include <stdio.h>  
  3. extern int f();  
  4. int main()   
  5. {  
  6.   printf(“return value is %d\n”,f());  
  7.   return 0;  
  8. }  

敲入如下命令:
gcc –c app.c
gcc -o app app.o -L. –ltest
敲命令的时候要记得将libtest.a文件和生成的app.o文件放在同一个目录(即当前目录)下。这样,敲入命令后,会在当前目录下生成一个名为app的可执行文件。-o表示指定输出文件名。执行一下./app,可以看一看结果:

这就是生成linux下面静态库的简单用法了。


编译Linux使用的.a库文件

 

首先是需要编译成.a的源文件

 

hello.h:

[objc]  view plain   copy
  print ? 在CODE上查看代码片 派生到我的代码片
  1. #ifndef __INCLUDE_HELLO_H__  
  2. #define __INCLUDE_HELLO_H__  
  3.   
  4. void hello(const charchar *name);  
  5.   
  6.   
  7. #endif // end __INCLUDE_HELLO_H__  

hello.c

[objc]  view plain   copy
  print ? 在CODE上查看代码片 派生到我的代码片
  1. #include "stdio.h"  
  2.   
  3.   
  4. void hello(const charchar *name)  
  5. {  
  6.     printf("Hello world %s\n", name);  
  7. }  


和一个在linux平台上做测试的main.c

[objc]  view plain   copy
  print ? 在CODE上查看代码片 派生到我的代码片
  1. #include "hello.h"  
  2.   
  3.   
  4. int main()  
  5. {  
  6.     hello("everyone");  
  7.       
  8.     return 0;  
  9. }  


在Linux上面做测试,编译成.a文件,主要利用.o文件和ar命令


1、首先生成.o文件:

gcc -c hello.c

这样源代码的目录下就会产生一个hello.o



2、利用ar命令,从.o文件中创建.a文件

ar cr libhello.a hello.o

这样就可以生成.a文件了,注意,所要生成的.a文件的名字前三位最好是lib,否则在链接的时候,就可能导致找不到这个库



3、在linux下测试使用

编译main.c,并让hello.a链接到main中

gcc main.c -L. -lhello -o main(注意这里-L后面有个.)

这样在当面目录下面就出现了可执行程序main,直接运行就是我们索要的结果了



Logo

更多推荐