<1>动态链接库
1.需要fun.c、 fun.h、 main.c三个文件以及交叉编译器arm-linux-gnueabif-gcc
2.结构为
主目录
|
|--------main.c
|--------src/
| |--------fun.c
|
|--------lib/
| |--------libfun.so
|
|--------inc/
| |--------fun.h
|
3.先编译fun.c生成链接库
bash
arm-linux-gnueabif-gcc -fPIC -shared ./lib/fun.c -o libfun.so
-fPIC:生成位置无关的代码,可以在任何内存地址加载
-shared:告诉编译器创建共享库而不是可执行文件(linux/unix 为.so,windows 为.dll)
- 然后编译main.c生成arm可执行文件
bash
arm-linux-gnueabif-gcc main.c -lfun -L./lib -I./inc -o a.out
-lfun:链接fun库
-L./lib:在 ./lib 中寻找fun链接库
-I./inc:在 ./inc 中寻找头文件
-o a.out:生成可执行文件名为a.out
5.将libfun.so移到挂载系统中的lib文件夹中
bash
cp ./lib/libfun.so ~/nfs/imx6/rootfs/lib
将可执行文件a.out移到挂在系统中的任意位置
bash
cp ./a.out ~/nfs/imx6/rootfs/study/fun
6.板子运行a.out即可

<2>静态链接库
1.fun.c main.c的编译不同
bash
gcc -c fun.c -o fun.o
gcc -c main.c -o main.o
2.创建静态链接库
bash
ar rcs libfun.a fun.o
ar 命令参数说明:
r - 替换或添加文件到库中
c - 创建库(如果不存在)
s - 创建索引
3.链接静态库生成可执行文件
bash
gcc main.o -L./lib -lfun -o a.out
<3>动态和静态差别
1.动态产生的可执行文件比静态产生的可执行文件要小很多。