您的位置:首页 > 运维架构 > Linux

苏嵌实训-嵌入式Linux C 第 4天 日报表

2020-07-14 06:35 681 查看
项目名称 苏嵌实训-嵌入式Linux C 第 4天】
今日进度以及任务 1.熟悉嵌入式开发工具 gcc gdb make 2.了解一些工具
本日任务完成情况(详细说明本日任务是否按计划完成,开发的代码量) 1.1、 编译器三级优化分别优化了哪些?2.总结gcc静态库和动态库的制作;3.总结CMake用法;
本日开发中出现的问题汇总 1.工具都找不到2,下载工具时,发现进度条不动
本日未解决问题 gdb,cmake下载不下来,好多错误
本日开发收获 新学了一些新指令,见到了一些自己的不足
其他

1、 编译器三级优化分别优化了哪些?
第一级:代码调整代码调整是一种局部的思维方式;基本上不触及算法层级;它面向的是代码,而不是问题; 所以:语句调整,用汇编重写、指令调整、换一种语言实现、换一个编译器、循环展开、参数传递优化等都属于这一级;这个级别试图执行9种单独的优化功能:

  1. -fdefer-pop

  2. -fmerge-constans

  3. -fthread-jumps

  4. -floop-optimize

  5. -fif-conversion: if-then

  6. -fif-conversion2

  7. -fdelayed-branch

  8. -fguess-branch-probability

  9. -fcprop-registers
    第二级:新的视角新的视角强调的重点是针对问题的算法;即选择和构造适合于问题的算法;(冒泡排序还是快排的选择问题是这一级早就应该完成的)很多经典算法都对问题作了一些假设(包括我们当前已经完成的算法实现),而在面对实际问题时“新的视角”提示我们应该重新检视这些假设,并尝试不同的思考问题的角度,寻求适合于问题的新算法; 编译器还试图采用以下几种优化。

  10. -fforce-mem

  11. -foptimize-sibling-calls

  12. -fstrength-reduce

  13. -fgcse

  14. -fcse-follow-jumps

  15. -frerun-cse-after-loop

  16. -fdelete-null-pointer-checks

  17. -fextensive-optimizations

  18. -fregmove

  19. -fschedule-insns

  20. -fsched-interblock

  21. -fcaller-saves

  22. -fpeephole2

  23. -freorder-blocks

  24. -fstrict-aliasing

  25. -funit-at-a-time

  26. -falign-functions

  27. -fcrossjumping
    第三级:表驱动状态机将问题抽象为另一种等价的数学模型或假想机器模型,比如构造出某种表驱动状态机;这一级其实是第二级的延伸,只是产生的效果更加明显,但它有其本身的特点(任何算法和优化活动都可以看作是他的投影);这一级一般可以产生无与伦比的快速程序, 要达到这一级需要大量修炼的;并且思考时必须放弃很多已有的概念或者这些概念不再重要,比如:变量、指针、空间、函数、对象等,剩下的只应该是那个表驱动状态机; 我想把这种境界描述为:空寂中,一些输入驱动着一个带有状态的机器按设定好的最短路线运转着;除此之外have nothing; 既:把解决一个问题的算法看作一个机器,它有一些可变的状态、有一些记忆、有一些按状态运行的规则,然后一些输入驱动这个机器运转;这就是第三级要求的思考优化问题的切入点,也就是寻找一部机器,使它运行经过的路径最短(可能是速度也可能是空间等等) 。编译器还试图采用以下这种优化方式。

  28. -finline-functions

  29. -fweb

  30. -fgcse-after-reload
    2、总结gcc静态库和动态库的制作;
    静态库:
    1.建立函数 如add.c sub.c main.c add.h sub.h

    2.生成 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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: