嵌入式C语言编程
嵌入式C语言编程
C语言概述
C语言的特点?(嵌入式开发为什么选择C语言)
能够直接访问硬件、运行效率高、移植性
面向过程?面向对象?
复用性(封装)、维护性(继承)、扩展性(多态)
C语言之父?
C语言的语法标准?
C语言开发工具
库文件
保存函数和变量,里面的函数和变量只能使用,但是看不到其实现
库函数
(保存在库文件):printf scanf strcpy strcat
库文件分类:
静态库.a,在编译阶段加载
动态可以.so:保存函数和变量,在执行阶段加载使用动态库和静态库的区别(可执行文件区别)
- 使用静态库编译出来的可执行文件大小 > 使用动态库编译出来的可执行文件 --->内存的开销
- 使用静态库编译出来的可执行文件执行速度 > 使用动态库编译出来的可执行文件执行速度
- 使用静态库编译的可执行文件升级 < 使用动态库编译出来的可执行文件升级
- 使用静态库编译的可执行文件程序部署 > 使用动态库编译出来的可执行文件程序部署
库文件的存放路径
系统运行所需要的库文件:lib
第三方软件和工具运行运行所需要的库:/usr/lib
编译时,编译器会自动到这两个目录找所需要的库文件
制作静态库
将目标源文件编译成目标文件 :gcc -c 目标源文件 目标源文件 。。。。。(gcc -c add.c)
使用ar工具制作静态库:ar -rcs(库不存在就创建,存在就更新) 所要生成的库文件的名字(lib+库名+后缀.a) 目标文件
ar -rcs libadd.a add.o
liutao@ubuntu:~/Cyuyan/shixun$ ls add.c add.h cmake-build-debug CMakeLists.txt main.c liutao@ubuntu:~/Cyuyan/shixun$ gcc -c add.c liutao@ubuntu:~/Cyuyan/shixun$ ls add.c add.h add.o cmake-build-debug CMakeLists.txt main.c liutao@ubuntu:~/Cyuyan/shixun$ ar -rcs libadd.a add.o liutao@ubuntu:~/Cyuyan/shixun$ ls add.c add.h add.o cmake-build-debug CMakeLists.txt libadd.a main.c使用静态库:
-l: 指定加载哪个静态库
-L: 指定加载的库的存放路径
//编译的库文件存放在lib或者usr/lib时 liutao@ubuntu:~/Cyuyan/shixun$ ls add add.c add.h add.o cmake-build-debug CMakeLists.txt demo.c libadd.a liutao@ubuntu:~/Cyuyan/shixun$ gcc demo.c -ladd /usr/bin/ld: cannot find -ladd collect2: error: ld returned 1 exit status liutao@ubuntu:~/Cyuyan/shixun$ sudo cp libadd.a /usr/lib [sudo] password for liutao: liutao@ubuntu:~/Cyuyan/shixun$ gcc demo.c -ladd //自定义存放路径./lib(相对路径也可以是绝对路径) liutao@ubuntu:~/Cyuyan/shixun$ ls add add.c add.h add.o a.out cmake-build-debug CMakeLists.txt demo.c lib libadd.a liutao@ubuntu:~/Cyuyan/shixun$ gcc demo.c -ladd -L./lib liutao@ubuntu:~/Cyuyan/shixun$ ls add add.c add.h add.o a.out cmake-build-debug CMakeLists.txt demo.c lib libadd.a liutao@ubuntu:~/Cyuyan/shixun$ ./add add=11 liutao@ubuntu:~/Cyuyan/shixun$ gcc demo.c //编译时会查找库 /usr/bin/ld: /tmp/cc8FiNeQ.o: in function `main': demo.c:(.text+0x1e): undefined reference to `add' collect2: error: ld returned 1 exit status制作动态库
gcc -shared -fPIC -o 库名.so 源文件.c
liutao@ubuntu:~/Cyuyan/shixun$ gcc -shared -fPIC -o libcal.so add.c sub.c liutao@ubuntu:~/Cyuyan/shixun$ ls add add.c add.h add.o cmake-build-debug CMakeLists.txt demo.c lib libcal.so sub.c sub.h sub.o使用动态库
liutao@ubuntu:~/Cyuyan/shixun$ ls add add.c add.h add.o cmake-build-debug CMakeLists.txt demo.c lib libcal.so sub.c sub.h sub.o liutao@ubuntu:~/Cyuyan/shixun$ gcc demo.c ./libcal.so -o main liutao@ubuntu:~/Cyuyan/shixun$ ./main sum = 11 add=1 //使用动态库编译时必须指定路径 liutao@ubuntu:~/Cyuyan/shixun$ gcc demo.c libcal.so -o main liutao@ubuntu:~/Cyuyan/shixun$ ./main ./main: error while loading shared libraries: libcal.so: cannot open shared object file: No such file or directory liutao@ubuntu:~/Cyuyan/shixun$

浙公网安备 33010602011771号