静态库-动态库 使用
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到开发板子运行。
是代码或功能模块的一种封装形式。
库里面把代码或功能模块封装,它只提供访问它的接口说明,以及二进制代码。
库实现一个在源代码文件,调用二进制代码的一种方式。
动态库编译的过程
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到开发板子运行。
相关文章推荐
- 添加mysql.h头文件
- 动态规划_初始
- dd 与 touch 的区别
- 安装cactiez v11对windows和linux系统进行监控
- 第四周 项目3(1)猜数字
- java学习笔记-JavaWeb篇一
- leetcode——172——Factorial Trailing Zeroes
- 第五周项目1三角形类雏形2
- 桶排序
- 输出型号图片
- 显卡驱动下载的路径
- DbUtils(可以代替SQLite)
- 循序渐进之Maven(1) - 搭建环境
- iOS -多字体混合
- Java的重载(Overload)与重写(Override)
- 【NOIP2012提高组】疫情控制
- 基于REST的web service project添加spring框架
- eclipse实现存储位置更改
- JS学习笔记(二)
- MySql存储引擎