本小测试程序是从<<linux程序设计第4版>>摘录;

直接入正正题:

我们要创建一个表态库,libfoo.a

所用文件: fred.c bill.c

其中fred.c代码如下:

 
  
  1. #include <stdio.h>  
  2.  
  3. void fred(int arg)  
  4. {  
  5.     printf("fred: we passed %d\n", arg);  
  6. }  

其中bill.c 代码如下:

 

 
  
  1. #include <stdio.h>  
  2.  
  3. void bill(char *arg)  
  4. {  
  5.     printf("bill: we passed %s\n", arg);  
  6. }  

这样我们做好了两个源文件。

我们还要做一个头文件lib.h,代码其实就是包涵这两个函数就行了。

 

 
  
  1. void bill(char *);  
  2. void fred(int); 

然后我们进行编译:把源文件编译成目标文件。

gcc -c bill.c fred.c

这样会生成两个.o文件,fred.o bill.o

然后我们就可以写测试程序了。我们写一个program.c.

 

 
  
  1. #include <stdlib.h>  
  2. #include "lib.h"  
  3.  
  4. int main(int argc, char *argv[])  
  5. {  
  6.     bill("hello world");  
  7.     exit(0);  
  8. }  

然后我们就可以编译了

gcc -c program.c

同样也是编译出目标文件。

然后我们可以编译出可执行文件。

gcc -o program program.o bill.o

这种方法我们一般都知道。

下面我们把bill.o 和 fred.o编译到静态库里。用ar命令。具体怎么用可以去查下。

ar crv libfoo.a bill.o fred.o

ar创建归档文件;AR = AR=/usr/local/ndk/toolchain/arm-eabi/bin/arm-eabi-ar
crv为参数。

libfoo.a为目标库,后面是生成库所用文件夹;

然后就可以看到libfoo.a,这个时候我们要用ranlib来对静态库的符号索引表进行更新;

ranlib libfoo.a

然后可以用这个库了

gcc -o program program.o libfoo.a

也可以用

gcc -o program program.o -L. lfoo

-L指定路径,要全路径,.是当前路径。