苏嵌实训-嵌入式Linux C 第 4天 日报表
项目名称 | 苏嵌实训-嵌入式Linux C 第 4天】 |
---|---|
今日进度以及任务 | 1.熟悉嵌入式开发工具 gcc gdb make 2.了解一些工具 |
本日任务完成情况(详细说明本日任务是否按计划完成,开发的代码量) | 1.1、 编译器三级优化分别优化了哪些?2.总结gcc静态库和动态库的制作;3.总结CMake用法; |
本日开发中出现的问题汇总 | 1.工具都找不到2,下载工具时,发现进度条不动 |
本日未解决问题 | gdb,cmake下载不下来,好多错误 |
本日开发收获 | 新学了一些新指令,见到了一些自己的不足 |
其他 | 无 |
1、 编译器三级优化分别优化了哪些?
第一级:代码调整代码调整是一种局部的思维方式;基本上不触及算法层级;它面向的是代码,而不是问题; 所以:语句调整,用汇编重写、指令调整、换一种语言实现、换一个编译器、循环展开、参数传递优化等都属于这一级;这个级别试图执行9种单独的优化功能:
-
-fdefer-pop
-
-fmerge-constans
-
-fthread-jumps
-
-floop-optimize
-
-fif-conversion: if-then
-
-fif-conversion2
-
-fdelayed-branch
-
-fguess-branch-probability
-
-fcprop-registers
第二级:新的视角新的视角强调的重点是针对问题的算法;即选择和构造适合于问题的算法;(冒泡排序还是快排的选择问题是这一级早就应该完成的)很多经典算法都对问题作了一些假设(包括我们当前已经完成的算法实现),而在面对实际问题时“新的视角”提示我们应该重新检视这些假设,并尝试不同的思考问题的角度,寻求适合于问题的新算法; 编译器还试图采用以下几种优化。 -
-fforce-mem
-
-foptimize-sibling-calls
-
-fstrength-reduce
-
-fgcse
-
-fcse-follow-jumps
-
-frerun-cse-after-loop
-
-fdelete-null-pointer-checks
-
-fextensive-optimizations
-
-fregmove
-
-fschedule-insns
-
-fsched-interblock
-
-fcaller-saves
-
-fpeephole2
-
-freorder-blocks
-
-fstrict-aliasing
-
-funit-at-a-time
-
-falign-functions
-
-fcrossjumping
第三级:表驱动状态机将问题抽象为另一种等价的数学模型或假想机器模型,比如构造出某种表驱动状态机;这一级其实是第二级的延伸,只是产生的效果更加明显,但它有其本身的特点(任何算法和优化活动都可以看作是他的投影);这一级一般可以产生无与伦比的快速程序, 要达到这一级需要大量修炼的;并且思考时必须放弃很多已有的概念或者这些概念不再重要,比如:变量、指针、空间、函数、对象等,剩下的只应该是那个表驱动状态机; 我想把这种境界描述为:空寂中,一些输入驱动着一个带有状态的机器按设定好的最短路线运转着;除此之外have nothing; 既:把解决一个问题的算法看作一个机器,它有一些可变的状态、有一些记忆、有一些按状态运行的规则,然后一些输入驱动这个机器运转;这就是第三级要求的思考优化问题的切入点,也就是寻找一部机器,使它运行经过的路径最短(可能是速度也可能是空间等等) 。编译器还试图采用以下这种优化方式。 -
-finline-functions
-
-fweb
-
-fgcse-after-reload
2、总结gcc静态库和动态库的制作;
静态库:
1.建立函数 如add.c sub.c main.c add.h sub.h2.生成 sub.o add.o 文件
Gcc –c add.c sub.c
3.创建静态库
ar rcs libas.a add.o sub.o
4.使用静态库
gcc main.c –las –L. –o main
./main
动态库:
1.建立函数 如add.c sub.c main.c add.h sub.h
2.创建动态库 gcc –shared –fPIC –o libas1.so add.c sub.c
3.使用动态库 gcc main.c ./libas1.so –o main1 ./main1
1.cmake 编译工程:
工程目录结构
[vic@localhost test]$ tree
.
├── CMakeLists.txt
├── include
│ └── cla.h
└── src
├── cla.c
└── main.c
2 directories, 4 files
CMakeLists.txt 内容:
cmake_minimum_required(VERSION 2.8.12.2)
project(main)
include_directories(include)
file(GLOB SOURCES “src/*.c”)
add_executable(main ${SOURCES})
cmake生成 Makefile 文件
[vic@localhost test]$ cmake .
– Configuring done
– Generating done
– Build files have been written to: /home/vic/0706/test
make 编译工程
[vic@localhost test]$ make
[100%] Built target main
工程编译后的目录结构
[vic@localhost test]$ tree -L 2
.
├── CMakeCache.txt
├── CMakeFiles
│ ├── 2.8.12.2
│ ├── cmake.check_cache
│ ├── CMakeDirectoryInformation.cmake
│ ├── CMakeOutput.log
│ ├── CMakeTmp
│ ├── main.dir
│ ├── Makefile2
│ ├── Makefile.cmake
│ ├── progress.marks
│ └── TargetDirectories.txt
├── cmake_install.cmake
├── CMakeLists.txt
├── include
│ └── cla.h
├── main
├── Makefile
└── src
├── cla.c
└── main.c
6 directories, 15 files
运行工程
[vic@localhost test]$ ./main
add = 9
sub = 3
mul = 18
div = 2
2.动态库编译(.so)
CMakeLists.txt 内容:
cmake_minimum_required(VERSION 2.8.12.2)
project(main)
include_directories(include)
file(GLOB SOURCES “src/*.c”)
add_library(main SHARED ${SOURCES})
cmake生成 Makefile 文件
[vic@localhost test]$ cmake .
– Configuring done
– Generating done
– Build files have been written to: /home/vic/0706/test
make 编译工程
[vic@localhost test]$ make
Scanning dependencies of target main
[ 50%] Building C object CMakeFiles/main.dir/src/cla.c.o
[100%] Building C object CMakeFiles/main.dir/src/main.c.o
Linking C shared library libmain.so
[100%] Built target main
工程编译后的目录结构
[vic@localhost test]$ tree -L 2
.
├── CMakeCache.txt
├── CMakeFiles
│ ├── 2.8.12.2
│ ├── cmake.check_cache
│ ├── CMakeDirectoryInformation.cmake
│ ├── CMakeOutput.log
│ ├── CMakeTmp
│ ├── main.dir
│ ├── Makefile2
│ ├── Makefile.cmake
│ ├── progress.marks
│ └── TargetDirectories.txt
├── cmake_install.cmake
├── CMakeLists.txt
├── include
│ └── cla.h
├── libmain.so
├── main
├── Makefile
└── src
├── cla.c
└── main.c
6 directories, 16 files
运行工程
[vic@localhost test]$ ./main
add = 9
sub = 3
mul = 18
div = 2
3.静态库编译 (.a)
CMakeLists.txt 内容:
cmake_minimum_required(VERSION 2.8.12.2)
project(main)
include_directories(include)
file(GLOB SOURCES “src/*.c”)
add_library(main STATIC ${SOURCES})
cmake生成 Makefile 文件
[vic@localhost test]$ cmake .
– Configuring done
– Generating done
– Build files have been written to: /home/vic/0706/test
make 编译工程
[vic@localhost test]$ make
[ 50%] Building C object CMakeFiles/main.dir/src/cla.c.o
[100%] Building C object CMakeFiles/main.dir/src/main.c.o
Linking C static library libmain.a
[100%] Built target main
工程编译后的目录结构
[vic@localhost test]$ tree -L 2
.
├── CMakeCache.txt
├── CMakeFiles
│ ├── 2.8.12.2
│ ├── cmake.check_cache
│ ├── CMakeDirectoryInformation.cmake
│ ├── CMakeOutput.log
│ ├── CMakeTmp
│ ├── main.dir
│ ├── Makefile2
│ ├── Makefile.cmake
│ ├── progress.marks
│ └── TargetDirectories.txt
├── cmake_install.cmake
├── CMakeLists.txt
├── include
│ └── cla.h
├── libmain.a
├── libmain.so
├── main
├── Makefile
└── src
├── cla.c
└── main.c
6 directories, 17 files
运行工程
[vic@localhost test]$ ./main
add = 9
sub = 3
mul = 18
div = 2
- 【苏嵌实训-嵌入式 linux C 第 4天】
- 苏嵌嵌入式linux实训 第 4天
- 苏嵌实训-嵌入式Linux C 第 5天 日报表
- 苏嵌实训-嵌入式 linux C 第 2 天
- 苏嵌实训-嵌入式Linux C 第 1天
- 苏嵌嵌入式linux实训 第 4 天
- 苏嵌嵌入式linux实训第二天
- 苏嵌嵌入式Linux实训 第6天
- 【苏嵌实训-嵌入式 linux C 第 5天】
- 苏嵌嵌入式linux实训第一天
- 苏嵌实训-嵌入式 linuxC 第 1 天
- 苏嵌实训-嵌入式 LinuxC 第 4天
- 【苏嵌实训-嵌入式 LinuxC 第 1 天】
- 苏嵌嵌入式Linux实训 第 6天
- 苏嵌嵌入式linux实训 第 3 天
- 苏嵌嵌入式Linux实训 第5天
- 苏嵌实训-嵌入式linux C 第 1 天
- 苏嵌嵌入式Linux实训第六天
- 苏嵌实训-嵌入式linux C 第 7 天
- 苏嵌嵌入式linux实训 第 5天