苏嵌实训-嵌入式linux C 第 4 天

项目名称

【苏嵌实训-嵌入式 linux C 第 4 天】

今日进度以及任务

 

1.gdb编译的使用、编译器三级优化

2.linux中静态和动态库

3.makefile的用法。

本日任务完成情况

(详细说明本日任务是否按计划完成,开发的代码量)

               

 1、gdb编译的使用、编译器三级优化

第一级:代码调整

 

代码调整是一种局部的思维方式;基本上不触及算法层级;它面向的是代码,而不是问题; 所以:语句调整,用汇编重写、指令调整、换一种语言实现、换一个编译器、循环展开、参数传递优化等都属于这一级;

这个级别的优化需要掌握大量的小的优化技巧和知识,需要不断的积累;

第二级:新的视角

 

新的视角强调的重点是针对问题的算法;即选择和构造适合于问题的算法;(冒泡排序还是快排的选择问题是这一级早就应该完成的)很多经典算法都对问题作了一些假设(包括我们当前已经完成的算法实现),而在面对实际问题时“新的视角”提示我们应该重新检视这些假设,并尝试不同的思考问题的角度,寻求适合于问题的新算法;

 

发掘问题的本来意义,从不同的角度思考面对的问题,使用适合于问题的的算法; 尝试打破一些规则,发掘和怀疑自己的某些假定,恢复问题的本来面目;

 

第三级:表驱动状态机

 

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

2、总结linux中静态和动态库;

静态:(1) 进入libtest/lib目录,执行命令:

gcc -c -I…/include hello.c

该命令生成目标文件hello.o,注意:参数-I添加头文件搜索目录,这里因为hello.c中有#include “hello.h”,hello.h在libtest/include目录中,这里需要指定该目录通知gcc,否则出现错误提示“找不到头文件hello.h”。

这一步将在libtest/lib目录中生成一个hello.o文件。

(2) 在libtest/lib目录,执行命令:

ar rc libhello.ahello.o

该命令将hello.o添加到静态库文件libhello.a,ar命令就是用来创建、修改库的,也可以从库中提出单个模块,参数r表示在库中插入或者替换模块,c表示创建一个库

这一步将在libtest/lib目录中生成一个libhello.a文件。

(3) 进入libtest/src目录,执行命令

动态:

1.将.c生成.o文件(生成与位置无关的代码 -fPIC)

 

gcc -c add.c -o add.o -fPIC

 

objdump -dS mymath >out objdump反汇编

2.使用gcc -shared制作动态库

 

gcc -shared -o lib库名.so add.o sub.o

 

3.编译可执行程序时指定所使用的动态库。-l:指定库名,-L:指定库路径。去掉lib和.so

3、makefile的用法。

在 linux 平台下使用 CMake 生成 Makefile 并编译的流程如下:

 

编写 CMake 配置文件 CMakeLists.txt 。

执行命令 cmake PATH 或者 ccmake PATH 生成 Makefile(ccmake 和 cmake 的区别在于前者提供了一个交互式的界面)。其中, PATH 是 CMakeLists.txt 所在的目录。

使用 make 命令进行编译。

本日开发中出现的问题汇总

本日未解决问题

本日开发收获

 

 

1.gdb编译的使用、编译器三级优化

2.linux中静态和动态库

3.makefile的用法。

其他

今后也要认真学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值