静态库-动态库 使用

来源:互联网 发布:nginx教程 编辑:程序博客网 时间:2024/04/29 20:37
库(lib):
    是代码或功能模块的一种封装形式。
    库里面把代码或功能模块封装,它只提供访问它的接口说明,以及二进制代码。

    库实现一个在源代码文件,调用二进制代码的一种方式。

动态库编译的过程

xxxx.c  
xxxx.h

arm-linux-gcc -shared -fpic -o libxxxx.so  xxxx.c 

arm-linux-gcc xxxx.c -o libxxxx.so -shared -fpic

-shared 动态库 

-fpic 与位置无关       

libxxxxx.so 生成的静态库文件

xxxx.c C文件

eg:

FILE:func.c

#include<stdio.h>
#include"func.h"
int add(int x,int y)
{
        printf("%d %d",x,y);
        return x+y;
}


FILE:func.h

#ifndef __FUNC_H__
#define __FUNC_H__

int add(int x,int y);

#endif

执行:arm-linux-gcc func.c -o libfunc.so -shared -fpic

生成:libfunc.so


提供头文件func.h和libfunc.so库文件,供使用


编写测试文件

FILE:main.c

#include<stdio.h>
#include"func.h"

int main(int argc,char *argv[])
{
        int result = add(3,5);
        printf("%d\n",result);
        return 0;
}

目录结构为:

klein@ubuntu:~/tftp/proj$ ls
include  libs  src

执行

klein@ubuntu:~/tftp/proj/src$ arm-linux-gcc main.c -o main -I ../include/ -L ../libs/ -l func

-I 说明头文件包含的路径

-L 说明要使用的静态库的存放目录

-l  说明要使用的静态库文件的名字(libxxxxx.so),只需输入xxxx就行了,如libfunc.so,输入func

生成main文件

可以直接下载到测试板子上运行,不过要把所依赖的libxxxx.so拷贝到实验板子的LD_LIBRARY_PATH下。

LD_LIBRARY_PATH: 是一个环境变量。Loading Library Path

加载库搜索路径。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/your/lib/files/path



静态库:

arm-linux-gcc -c a.c -o a.o
arm-linux-gcc -c b.c -o b.o


1. a.c  b.c   写代码,(.c, .h)

2.  把各源码文件编成.o 文件
    arm-linux-gcc -c a.c -o a.o =>a.o
    arm-linux-gcc -c b.c -o b.o =>b.o

3.用ar的命令把所有的.o文件,生成一个静态库
    arm-linux-ar -rc libxxxx.a a.o b.o(功能函数)

    把头文件和静态库拷贝给需要的人
    main.c <-libsub.a里面的函数

      (Include)-I接一个目录名,指定头文件的搜索路径,可以接多个-I
      (lib)-l 指定一个库的名字, 可以接多个-l
      -L指定一个库的搜索路径

       (arm-linux-)gcc main.c -I./ -L./ -lsub -o main

       生成的main这个可执行文件,直接把静态库libsub.a这个文件里面所有的内容    
       都编到可执行文件main中去了。

4.直接下载main,运行就可以了。


FILE:a.c

#include "a.h"

int max(int a,int b,int c){
        return a>b?(a>c?a:c):(b>c?b:c);
}


FILE:a.h

#ifndef __A_H__
#define __A_H__
int max(int a,int b,int c);
#endif

arm-linux-gcc -c a.c -o a.o

生成a.o

arm-linux-ar -rc libmax.a a.o
生成静态连接库文件 libmax.a

FILE:main.c

#include<stdio.h>
  9 #include"a.h"
 10
 11 int main(int argc,char *argv[])
 12 {
 13     int result = max(2,3,4);
 14     printf("%d\n",result);
 15     return 0;
 16 }

arm-linux-gcc main.c -o main -I ./ -L ./ -l max

生成main执行文件


下载main到开发板子运行。










0 0
原创粉丝点击