您的位置:首页 > 其它

静态库-动态库 使用

2016-03-29 20:30 441 查看
库(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到开发板子运行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: