学习日志 姓名:叶圣民 日期:2018年7月10日
|
|
今日学习任务:
1、了解嵌入式;(定义、开发流程、企业需求、发展前景) 2、前沿技术与嵌入式开发的关系;(人工智能、大数据、云计算) 3、嵌入式 Linux 安装及使用;(redhat,Ubuntu,虚拟机的作用)
|
|
今日任务完成情况 1、gcc介绍(gcc 是GNU计划的工具,可以编译多种语言,交叉编译器); 2、了解什么是交叉编译器?为什么需要交叉编译器? 例:在win PC机下编译的汇编码和机器码是51单片机可以识别的汇编码和机器码。 3、源文件到可执行文件经历 预处理,编译,汇编 和 链接 这四个步骤; 4、预处理做的工作: 对头文件展开;#include<stdio.h> VS #include"stdio.h":<>:从系统头文件库搜索;"":先从当前目录搜索,无果后再去系统头文 件库搜索; gcc -E 1文件名.c > 2文件名.i;>重定向; 5、如何让编译器停止在预处理阶段? gcc -c 文件名.c > 文件名.i; 6、编译阶段做哪些工作? 语法检查,词法分析; 7、如何让编译其停止在编译阶段? gcc -c 文件名.c //当前目录下生产 .o 目标文件; 8、 -S汇编(gcc -S 文件名.c):生产汇编文件; 9、-o 例:gcc hello.c -o hello //生产hello名的可执行文件 10、 -I 例 gcc hello.c -I../ /*指定第三方头文件搜索路径 11、链接 12、优化 1级2级3级:例 gcc -o1 hello.c 13、-w /*关闭警告*/ -Wall /*开警告*/ 14、静态库(1) 和 动态库(2): 1.文件名.a;先生成 .o文件;ar rcs libadd.a add.o /*其中库文件真是名为add*/;链接库 gcc main.c -ladd -L./* . 当前目录*/ 2.建立 gcc -shared -fPIC -o 库名.so 源文件;使用 gcc 源文件.c ./库名.so -o 可执行文件; 15、静态库 和 动态库 的区别: 静态库 在编译前把所有库文件加载好,这样会有许多多余文件,使可执行文件过大,但是编译速度快; 动态库 在编译时用到之后再搜索所需文件,这样可执行文件小,但是执行时需要多次搜索库文件,速度慢; |
|
今日开发中出现的问题汇总 1、如何输出0~100以内的素数? 2、链接的作用? |
|
今日未解决问题 链接的作用? |
|
今日开发收获 学会了gcc的许多强大的功能; |
|
自我评价 通过今天的开发和学习;基本完成了今日的学习目标;了解了gcc强大的功能;学会了几种gcc的使用方法;了解了从源代码到可执行文件的过程。
|
|
其他 无 |
|
hello.c:
#include<stdio.h>
int main()
{
printf("Hello world!\n");
return 0;
}
/*******text1.c(0~100输出所有素数)********/
#include<stdio.h>
int main()
{
int a;
int b;
int c;
printf("2 ");
for(a = 3;a < 100;a += 2)
{
for(b = 3;(c = b * b)<= a;b += 2)
if(a % b == 0) break;
if(c > a)
printf("%d ",a);
}
printf("\n");
return 0;
}
/*****main.c*******/
#include <stdio.h>
int main()
{
add(8,4);
sub(8,4);
return 0;
}
/*********add.c**********/
#include <stdio.h>
int add(int a,int b)
{
printf("a = %d; b = %d \n",a,b);
printf("add = %d \n",a + b);
return a + b;
}
/********sub.c********/
#include <stdio.h>
int sub(int i,int k)
{
printf("i = %d; k = %d \n",i,k);
printf("sub = %d \n",i - k);
return i - k;
}