1,库的使用与生成
1,如果你不想你的代码公开出来的时候我们会用到库
只能给人调用,别人看不到代码的原型
2,库的作用:
1,提高代码的可移植性
2,加强加密性
库的分类:
1,静态库:
特点: 1,程序编译的时候如果使用到这个库的函数,是将这个函数的代码连同程序代码一起编译,把函数的代码放入程序里面
2,代码不需要依赖于环境
3,这样编译,代码比较大
2,动态库:
特点: 1,程序编译的时候如果使用到这个库的函数,是将这个函数的代码连同程序代码一起编译,但是不把函数的代码放进程序里面
2,程序需要依赖于环境(在我的执行环境中必须要有这个库文件)
3,代码比较小
3,如何制作库:
1,如何制作静态库:
gcc hello.c -o hello.o -c (让他停留在编译的阶段,生成.o)
ar rc libhello.a hello.o (归档生成静态库)
2,如何制作动态库:
gcc -shared hello.c -o libhello.so(生成动态库)
4,如何使用库:
1,库的编译都是一样的:
gcc main.c -o main -L /mnt/hgfs/share -lhello
如果还有别的头文件路劲:
gcc main.c -o main -I ./include -L /mnt/hgfs/share -lhello
静态库加一个static:
gcc -static main.c -o main -L /mnt/hgfs/share -lhello
如果还有别的头文件路劲:
gcc -static main.c -o main -I ./include -L /mnt/hgfs/share -lhello
其中:
-L:指定库的路径
-l:指定库名(lib库名.库尾缀)
如果在这个路径下同时存在静态库与动态库,优先以动态库的形式去编译,如果你想用静态库(-static)
2,库的使用:
1,静态库编译后,程序是不需要依赖他的,所以,程序运行可以不用管这个库在哪里或者有没有
2,动态库编译后,程序需要依赖他,程序运行之前一定要把库文件放进系统的库的环境变量路径当中
(所以就知道为什么移植jpeg库的时候要把动态库拷贝到开发板的lib当中的原因)
或者:
不放到/lib当中,并且配置相应的环境变量,使得系统(开发板)知道增加了库文件:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库文件所在路径(比如/01/lib)
2,动态编译与静态编译
1,区别在与编译的时候有没有加static关键字
2,动态编译的时候,程序调用的函数默认是以动态库的形式编译的,简单说就是程序编译没有调用函数的原型代码编译进去,只是在运行的时候去调用我们的库
3,静态编译的时候,程序调用的函数默认是以静态库的形式编译的,简单说就是程序编译调用函数的原型代码编译进去,只是在运行的时候不需要依赖于这个库
3,如何配置针对arm的开发工具链
1,获取工具链(公司获取)
2,工具链的使能(arm-2009q3)
将他解压到/usr/local/arm/
3,更改环境变量脚本
只针对本用户生效:~/.bashrc
针对整个系统全局生效:/etc/bash.bashrc
在后面添加一句:
export PATH=/usr/local/arm/arm-2009q3/bin:$PATH
ps:如果有两个工具链名字一样,你需要屏蔽另外一个
1,如果你不想你的代码公开出来的时候我们会用到库
只能给人调用,别人看不到代码的原型
2,库的作用:
1,提高代码的可移植性
2,加强加密性
库的分类:
1,静态库:
特点: 1,程序编译的时候如果使用到这个库的函数,是将这个函数的代码连同程序代码一起编译,把函数的代码放入程序里面
2,代码不需要依赖于环境
3,这样编译,代码比较大
2,动态库:
特点: 1,程序编译的时候如果使用到这个库的函数,是将这个函数的代码连同程序代码一起编译,但是不把函数的代码放进程序里面
2,程序需要依赖于环境(在我的执行环境中必须要有这个库文件)
3,代码比较小
3,如何制作库:
1,如何制作静态库:
gcc hello.c -o hello.o -c (让他停留在编译的阶段,生成.o)
ar rc libhello.a hello.o (归档生成静态库)
2,如何制作动态库:
gcc -shared hello.c -o libhello.so(生成动态库)
4,如何使用库:
1,库的编译都是一样的:
gcc main.c -o main -L /mnt/hgfs/share -lhello
如果还有别的头文件路劲:
gcc main.c -o main -I ./include -L /mnt/hgfs/share -lhello
静态库加一个static:
gcc -static main.c -o main -L /mnt/hgfs/share -lhello
如果还有别的头文件路劲:
gcc -static main.c -o main -I ./include -L /mnt/hgfs/share -lhello
其中:
-L:指定库的路径
-l:指定库名(lib库名.库尾缀)
如果在这个路径下同时存在静态库与动态库,优先以动态库的形式去编译,如果你想用静态库(-static)
2,库的使用:
1,静态库编译后,程序是不需要依赖他的,所以,程序运行可以不用管这个库在哪里或者有没有
2,动态库编译后,程序需要依赖他,程序运行之前一定要把库文件放进系统的库的环境变量路径当中
(所以就知道为什么移植jpeg库的时候要把动态库拷贝到开发板的lib当中的原因)
或者:
不放到/lib当中,并且配置相应的环境变量,使得系统(开发板)知道增加了库文件:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库文件所在路径(比如/01/lib)
2,动态编译与静态编译
1,区别在与编译的时候有没有加static关键字
2,动态编译的时候,程序调用的函数默认是以动态库的形式编译的,简单说就是程序编译没有调用函数的原型代码编译进去,只是在运行的时候去调用我们的库
3,静态编译的时候,程序调用的函数默认是以静态库的形式编译的,简单说就是程序编译调用函数的原型代码编译进去,只是在运行的时候不需要依赖于这个库
3,如何配置针对arm的开发工具链
1,获取工具链(公司获取)
2,工具链的使能(arm-2009q3)
将他解压到/usr/local/arm/
3,更改环境变量脚本
只针对本用户生效:~/.bashrc
针对整个系统全局生效:/etc/bash.bashrc
在后面添加一句:
export PATH=/usr/local/arm/arm-2009q3/bin:$PATH
ps:如果有两个工具链名字一样,你需要屏蔽另外一个