工程实践实训日报二

工程实践实训日报二

项目名称 【苏嵌实训-嵌入式 linux C 第 2 天】

今日进度以及任务 今天主要学习了静态库和动态库的创建与使用,以及CMake的用法。
本日任务完成情况 掌握了静态库和动态库的创建,但是对CMake的用法还不熟悉。目前来说个人觉得代码量还不是很大。
本日开发中出现的问题汇总 对新知识点的吸收有点慢,不太能更上老师的进度。
本日未解决问题 对CMake的使用。
本日开发收获 掌握了静态库和动态库的创建。
其他 深知自己还有很多不足,期待跟着老师后面学习,能够有更多收获。

今日作业
1、编译器三级优化分别优化了哪些?
第一级:代码调整
代码调整是一种局部的思维方式;基本上不触及算法层级;它面向的是代码,而不是问题;所以:语句调整,用汇编重写、指令调整、换一种语言实现、换一个编译器、循环展开、参数传递优化等都属于这一级;这个级别的优化需要掌握大量的小的优化技巧和知识,需要不断的积累;简单的语句调整、公共表达式提取、废代码删除等当前的很多编译器也能做到了,但也需要了解一些编译器的优化能力使自己的代码配合编译器做好优化;用汇编重写并不是简单把高级语言改写为汇编实现,那样写的汇编很可能没有当今的编译器产生的代码好,所以如果决定用汇编实现,那就应该按照汇编的角度来规划自己的实现,适当的参考编译器生成的汇编码也是可取的;在某些领域,使用CPU的新特性和新的指令集等将产生巨大的性能收益,这些地方经常采用汇编来实现。

第二级:新的视角
新的视角强调的重点是针对问题的算法;即选择和构造适合于问题的算法;(冒泡排序还是快排的选择问题是这一级早就应该完成的)很多经典算法都对问题作了一些假设(包括我们当前已经完成的算法实现),而在面对实际问题时“新的视角”提示我们应该重新检视这些假设,并尝试不同的思考问题的角度,寻求适合于问题的新算法;
发掘问题的本来意义,从不同的角度思考面对的问题,使用适合于问题的的算法; 尝试打破一些规则,发掘和怀疑自己的某些假定,恢复问题的本来面目;

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

2、总结gcc静态库和动态库的制作。
静态库制作:
gcc -c src/add.c -o add.o //制作obj文件
ar -crv lib/libadd.a add.o //制作归档文件
gcc src/main.c -Llib -ladd -o main //加上L(指明链接目录) l(指明链接库名)

动态库制作(.so):
gcc -shared -fPIC -o lib/libadd.so src/add.c
或者 gcc -fPIC -c src/add.c
gcc -shared -o libadd.so add.o

3、总结CMake用法。
常用的命令:
include_directories
指定头文件的搜索路径,相当于指定gcc编译器的-I参数
link_directories
动态链接库或静态链接库的搜索路径,相当于指>定gcc的-L参数
add_subdirectory
包含子目录,当工程包含多个子目录时,此命令有用
add_definitions
添加编译参数,比如add_definitions(-DDEBUG)将在gcc命令行添加DEBUG宏定义
add_executable
编译可执行程序
target_link_libraries
指定链接库,相同于指定-l参数
转载自:
http://blog.sina.com.cn/s/blog_505635f901008g6a.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值