项目开发日报表——第二天
项目开发日报表——第二天
项目名称 | 【苏嵌实训-嵌入式 linuxC 第 2 天】 |
---|---|
今日进度以及任务 | 学习编译器gcc、调试器gdb,工程管理器make,并写相关的代码熟悉掌握这些开发工具。 |
本日任务完成情况 (详细说明本日任务是否按计划完成,开发的代码量) | 按计划完成。编写了算法库,库中包括加减乘除四种运算,并分别创建了一个静态库和动态库;用gdb调试代码,使用run、break、step调试了代码;用make对工程里面的文件全部编译,将之前的加减乘除用makefile完成。 |
本日开发中出现的问题汇总 |
1.编译器三级优化分别优化了哪些? 2、总结gcc静态库和动态库的制作; 3、总结CMake用法; |
本日开发收获 | 学会了用gcc创建静态库与动态库、gdb调式代码的方法以及使用make处理大量需要编译的文件,会编写makefile文件,最后初步了解到cmake的一些用法 |
问题解答:
1.编译器三级优化分别优化了哪些?
第一级:代码调整
代码调整是一种局部的思维方式;基本上不触及算法层级;它面向的是代码,而不是问题; 所以:语句调整,用汇编重写、指令调整、换一种语言实现、换一个编译器、循环展开、参数传递优化等都属于这一级; 这个级别的优化需要掌握大量的小的优化技巧和知识,需要不断的积累;
简单的语句调整、公共表达式提取、废代码删除等当前的很多编译器也能做到了,但也需要了解一些编译器的优化能力使自己的代码配合编译器做好优化; 用汇编重写并不是简单把高级语言改写为汇编实现,那样写的汇编很可能没有当今的编译器产生的代码好,所以如果决定用汇编实现,那就应该按照汇编的角度来规划自己的实现,适当的参考编译器生成的汇编码也是可取的(特别是新手,我也一样);在某些领域,使用CPU的新特性和新的指令集等将产生巨大的性能收益,这些地方经常采用汇编来实现。
第二级:新的视角
新的视角强调的重点是针对问题的算法;即选择和构造适合于问题的算法;(冒泡排序还是快排的选择问题是这一级早就应该完成的)很多经典算法都对问题作了一些假设(包括我们当前已经完成的算法实现),而在面对实际问题时“新的视角”提示我们应该重新检视这些假设,并尝试不同的思考问题的角度,寻求适合于问题的新算法; 发掘问题的本来意义,从不同的角度思考面对的问题,使用适合于问题的的算法; 尝试打破一些规则,发掘和怀疑自己的某些假定,恢复问题的本来面目。
第三级:表驱动状态机
将问题抽象为另一种等价的数学模型或假想机器模型,比如构造出某种表驱动状态机;这一级其实是第二级的延伸,只是产生的效果更加明显,但它有其本身的特点(任何算法和优化活动都可以看作是他的投影);这一级一般可以产生无与伦比的快速程序, 要达到这一级需要大量修炼的;并且思考时必须放弃很多已有的概念或者这些概念不再重要,比如:变量、指针、空间、函数、对象等,剩下的只应该是那个表驱动状态机; 我想把这种境界描述为:空寂中,一些输入驱动着一个带有状态的机器按设定好的最短路线运转着;除此之外have nothing; 既:把解决一个问题的算法看作一个机器,它有一些可变的状态、有一些记忆、有一些按状态运行的规则,然后一些输入驱动这个机器运转;这就是第三级要求的思考优化问题的切入点,也就是寻找一部机器,使它运行经过的路径最短(可能是速度也可能是空间等等)。
2.总结gcc静态库和动态库的制作;
静态库: 创建:
步骤 | 注释 |
---|---|
gcc -c 源文件.c | 生成.o文件 |
ar arc 静态库名 目标文件1 目标文件2 | 库名前缀lib,后缀.a,如libadd.a;目标文件后缀为.o |
使用:
(1)步骤:gcc 源文件.c -l库名 -L. -o main
(2)注释:此处库名去除前缀和后缀,L后面接源文件地址,-o生成目标文件;
(3)示例:gcc main.c -ladd -L. -o main
动态库: 创建:
(1)步骤:gcc -shared -fPIC -o库名.so 源文件.c
(2)注释:库名带前缀后缀
(3)示例:gcc -shared -fPIC -o libcal.so cal.c
3.总结CMake用法
步骤:(1)写CMakeLists.txt文件;
(2)使用命令 cmake .,生成makefile文件;
(3)使用命令make,生成最终目标文件;
示例:源代码只有一个文件hello.c
源代码:
CMakeLists.txt文件:
运行结果展示:
项目开发日报表——第二天相关推荐
- 项目开发日报表(第四天 )
项目开发日报表 项目名称 苏嵌实训-嵌入式LinuxC第n天 今日进度以及任务 1:编译器三级优化分别优化了哪些? 2:总结gcc ...
- ASP.NET3.5 企业级项目开发 -- 第二章(续) 数据访问层(DAL)的开发解决方案提出...
ASP.NET3.5 企业级项目开发 -- 第二章(续) 数据访问层(DAL)的开发解决方案提出 前言:首先给大家说声"对不起",因为自从打算写这系列的文章以来,得到大家很多的支持 ...
- ASP.NET3.5 企业级项目开发 -- 第二章 数据访问层(DAL)的开发
为什么80%的码农都做不了架构师?>>> ASP.NET3.5 企业级项目开发 -- 第二章 数据访问层(DAL)的开发 前言:本篇主要讲述数据访问层的开发, ...
- 【项目开发实战】第二章——在线商城系统
系列文章目录 第一章--AI人机对战版五子棋游戏 第二章--在线商城系统 文章目录 系列文章目录 前言 1.项目介绍 2.项目规划分析 2.1 电子商务的简要介绍 2.2 在线博客+商城系统构成模块 ...
- wincc报表日报表实例_工作系统二次开发二Python加工原膜切割日报表数据实例
#工作系统二次开发二Python加工原膜切割日报表数据实例 #当查询一个或多个工作令后在表格展示数据前按要求对数据进行二次处理,处理要求看如下 #1.加工单号和母卷物料编号相同则把除第一行外的领料有关 ...
- 数据分析真题日刷 | 商汤科技2018校招C++/算法开发/大数据/后端/运维/测试/数据挖掘开发工程师笔试第二场
断了大半个月没有刷题,进入「数据分析真题日刷」系列第13篇 . 今日真题 商汤科技2018校招C++/算法开发/大数据/后端/运维/测试/数据挖掘开发工程师笔试第二场 (来源:牛客网) 题型 客观题: ...
- 仿LOL项目开发第二天
仿LOL项目开发第二天 by草帽 接着上节来讲,上节更新还没开始写代码逻辑,今天我们补充完整. 我们找到VersionManager脚本里面的CheckVersion方法: 首先我们想到检测版本,需要 ...
- [转载]小软件项目开发的管理(好长)
小软件项目开发的管理 创建成功的工程 成功项目管理的秘密 更好地领导一个项目的诀窍 参与变革,走向成功 CMM/TSP/PSP讲义稿 开发流程中的可用性 软件开发的管理和控制 如何组织软件开发团队 软 ...
- 《实战突击:PHP项目开发案例整合(第2版)(含DVD光盘1张)》
<实战突击:PHP项目开发案例整合(第2版)(含DVD光盘1张)> 基本信息 作者: 徐康明 辛洪郁 出版社:电子工业出版社 ISBN:9787121221378 上架时间:2014 ...
最新文章
- Docker 搭建elasticsearch 7.6.x集群
- 嵌入式学习笔记之四 (uboot启动流程)
- android工程r红,Android Studio - 为什么R随机变为红色?
- 十一在家都逛哪些技术网站?(程序员必备58个网站汇总)
- java session 详解
- 自学计算机软件及应用,[计算机软件及应用]JavaEE自学材料.pdf
- (C/C++) Link List - C++ 版本
- 下半年登场!小米MIX 4概念图曝光:有望首发屏下摄像头
- 4月1日见!小米9王源定制版官宣:透明版背壳加持
- 阿里一面,说说你对zookeeper中ZAB协议的理解?
- php 后期发展,php – 通过后期处理上传进度
- 2020-02-09 改udev硬件配置策略,改ETHTOOL_OPTS 或改 `/etc/NetworkManager/dispatcher.d/20-ethtool`...
- python课程价格-南山区python课程价格
- Visual Studio 2015 官方下载及密钥
- 检测浏览器是否支持ajax ===小代码
- MySQL - 执行sql报错USING BTREE
- 使用Windows Sysprep来封装系统
- 电子书chm转换html,chm转换为html的超简单方法
- 装饰者模式 增加功能;动态代理减少功能 只要完成自己部分功能 (繁杂部分交给他人处理)...
- 分析XBrowser地址栏使用案例
热门文章
- 防火墙策略管理小工具——网络安全
- vue 实现背景图片动态绑定
- 2018最新北风网人工智能
- C语言文件操作:获取文件中文本的大小(长度)
- 经纬度与地心笛卡尔坐标系转换
- Incorrect string value: : “\xE6\x9D\x8E\xE6\xBA\x90‘ for column ‘username‘
- Kotlin面向对象
- Python:正方系统抢课
- mysqldump: Error: Binlogging on server not active
- python 绘制k线图_利用python numpy+matplotlib绘制股票k线图的方法