一、预处理错误

1.include 出错第1种

include 就是把后面带有的“ ”或< >内容中查找的名字,双引号是在当前路 径查找,而尖括号是在系统环境变量中查找。双引号一般都是用户自己自定义 的头文件,尖括号是系统定义的头文件。

include 最常见的错误是 not find(找不到头文件)实战如下例子说明:

strom@strom-PC:~/Downloads/linux_system/Learn/e/1$ cat welcome2.c  
#include <stdio.h>
#include <abc.h>   //注意:这里是错误的写法
int main(int argc,char* argv[]){

char ch[N] = "hello!";
       printf("Welcome,%s\n",ch);
       return 0;
}
strom@strom-PC:~/Downloads/linux_system/Learn/e/1$ cat abc.h  
#define N 20

注意:编译提示如下信息

strom@strom-PC:~/Downloads/linux_system/Learn/e/1$ gcc -o build welcome2.c abc.h  
welcome2.c:2:10: fatal error: abc.h:
#include <abc.h> 
         ^~~~~~~ 
compilation terminated.

注意:这里的错误原因是不是在系统环境查找<abc.h>文件,要改成“abc.h” 进行查找才是对的。

2.include 出错第2种

实战第2种错误方法

strom@strom-PC:~/Downloads/linux_system/Learn/e/1$ cp -rp welcome2.c welcome3.c
strom@strom-PC:~/Downloads/linux_system/Learn/e/1$ mkdir -p inc/
strom@strom-PC:~/Downloads/linux_system/Learn/e/1$ mv abc.h ./inc/   
strom@strom-PC:~/Downloads/linux_system/Learn/e/1$ cat welcome3.c  
#include <stdio.h>
#include "abc.h"
int main(int argc,char* argv[]){

char ch[N] = "hello!";
       printf("Welcome,%s\n",ch);
       return 0;
}

注意:这里我头文件移动到创建的inc目录下,在开发大项目的时候都会创建 一定的目录分类。

strom@strom-PC:~/Downloads/linux_system/Learn/e/1$ gcc -o build welcome3.c  
welcome3.c:2:10: fatal error: abc.h:
#include "abc.h" 
         ^~~~~~~ 
compilation terminated.

include第2种错误的解决办法使用gcc -I 头文件目录

strom@strom-PC:~/Downloads/linux_system/Learn/e/1$ gcc -I ./inc/ -o bulid welcome3.c  
strom@strom-PC:~/Downloads/linux_system/Learn/e/1$ ./bulid  
Welcome,hello!

3.编译语法错误

这种错误如:分号忘记写“;”或者是 { } 写错误了等,这个语法错误根据实际情 况定义。

链接错误

什么链接错误,链接错误就是在最后打包的时候错误,链接所指的是将所有的“.o” 文件进行融合并输出一个可执行文件。链接错误最主要的是“.o”文件和其他元素 不够,比如:你要做一个手工月饼需要原材料,但是这个原材料不够或者多了。

实战链接错误例子1(原材少的原因)

strom@strom-PC:~/Downloads/linux_system/Learn/e/1$ cat welcome4.c  
#include <stdio.h>
#include "abc.h"

void fun(void);

int main(int argc,char* argv[]){

char ch[N] = "hello!";
       printf("Welcome,%s\n",ch);
       fun();
       return 0;
}

注意:这里只是声明了fun() 函数,但是fun()函数内容没有,这个就是原材料不 够的错误。编译一下看看提示什么信息

strom@strom-PC:~/Downloads/linux_system/Learn/e/1$ gcc -I ./inc/ -o build welcome4.c  
/usr/bin/ld: /tmp/cctHebIV.o: in function `main':
welcome4.c:(.text+0x44): undefined reference to `fun'
collect2: error: ld returned 1 exit status

注意:collect2错误就是链接错误,在上一章节有详细说明,undefined reference to `fun' ,这个错误就是原材料不够原因引起的。

解决办法是给它添加一个原材料代码如下编写

strom@strom-PC:~/Downloads/linux_system/Learn/e/1$ cat welcome4.c  
#include <stdio.h>
#include "abc.h"

void fun(void);

int main(int argc,char* argv[]){

char ch[N] = "hello!";
       printf("Welcome,%s\n",ch);
       fun();
       return 0;
}

void fun(void){
}
strom@strom-PC:~/Downloads/linux_system/Learn/e/1$ gcc -I ./inc/ -o build welcome4.c

注意:虽然这个样不报错,但是这个函数没有意义。

实战链接错误例子2(原材少的原因)

strom@strom-PC:~/Downloads/linux_system/Learn/e/1$ cat abc.c  
void fun(void){

}
strom@strom-PC:~/Downloads/linux_system/Learn/e/1$ cat welcome4.c  
#include <stdio.h>
#include "abc.h"

void fun(void);

int main(int argc,char* argv[]){

char ch[N] = "hello!";
       printf("Welcome,%s\n",ch);
       fun();
       return 0;
}

注意:这里是将fun()函数体的内容,另外分配一个”.c”文件。

接着将abc.c和welcome4.c文件进行打包使用gcc -c 命令进行

strom@strom-PC:~/Downloads/linux_system/Learn/e/1$ gcc -c -I ./inc/ -o abc.o abc.c

strom@strom-PC:~/Downloads/linux_system/Learn/e/1$ gcc -c -I ./inc/ -o welcome4.o welcome4.c

最后将“.o”原材料进行打包得到最后的可执行文件

strom@strom-PC:~/Downloads/linux_system/Learn/e/1$ gcc -o build abc.o welcome4.o
strom@strom-PC:~/Downloads/linux_system/Learn/e/1$ ./build
Welcome,hello!

注意:那如果是原材料多的情况是什么样子的呢?我们来模拟这种现象 看看。

实战原材料多的情况,修改welcome4.c文件代码

strom@strom-PC:~/Downloads/linux_system/Learn/e/1$ cat welcome4.c  
#include <stdio.h>
#include "abc.h"

void fun(void);

int main(int argc,char* argv[]){

char ch[N] = "hello!";
       printf("Welcome,%s\n",ch);
       fun();
       return 0;
}

void fun(void){
       printf("============\n");
}

通过gcc -c  和gcc -o 进行编译看一下原材料多的情况

strom@strom-PC:~/Downloads/linux_system/Learn/e/1$ gcc -c -I ./inc/ -o welcome4.o welcome4.c      
strom@strom-PC:~/Downloads/linux_system/Learn/e/1$ gcc -o build abc.o welcome4.o
/usr/bin/ld: welcome4.o: in function `fun':
welcome4.c:(.text+0x4f): multiple definition of `fun'; abc.o:abc.c:(.text+0x0): first defined here
collect2: error: ld returned 1 exit status

注意:这里提示multiple definition,这个意思是多次使用此标签,也就 是原材量多的情况。最多只能保留一个标签,所以这里会报错。

总结 : 预处理错误分为两种: 1) 是使用了系统环境的头文件导致错误。

2)是在开发过程中将头文件单独存放在一个文件中。

3)第2种方式可以使用 gcc -I <头文件目录下的文件> 进行处理预处理报错的情况。

编译错误分为两种:     1)undefined reference to。

2) multiple definition of 。

2021年 ARM嵌入式实战 第3章 C/C++编译常见错误相关推荐

  1. [ARM嵌入式系统开发]第一章之嵌入式系统的软硬件

    本章的最后,通过描述ARM为核心的嵌入式系统,来介绍了嵌入式系统的软件和硬件构成和结构.这里根据这部分的介绍以及其他的文章,描述下通用的嵌入式系统的软件和硬件.     首先来说下硬件,书中说,包含有 ...

  2. [ARM嵌入式系统开发]第一章之Dhrystone

    在书的第一章开头部分,作者提到了"最成功的ARM内核之一ARM7TDMI,具有最高120 Dhrystone MIPS的性能.高的代码密度和低功耗等特性,使它成为移动嵌入式设备的最佳选择&q ...

  3. 嵌入式ARM系统实战开发视频教程

    分享一套韩老师的关于嵌入式ARM的视频教程--<嵌入式ARM系统实战开发(编程模型.指令系统.程序设计.混合编程.驱动开发)>,本课程重点是给大家讲解嵌入式ARM的开发方法,采用理论与实践 ...

  4. 嵌入式ARM系统实战开发教程下载

    分享一套韩老师的关于嵌入式ARM的视频教程--<嵌入式ARM系统实战开发(编程模型.指令系统.程序设计.混合编程.驱动开发)>,本课程重点是给大家讲解嵌入式ARM的开发方法,采用理论与实践 ...

  5. 关于举办“2021全国高校计算机视觉实战暑期教师研修班”的通知

    近年来,我国在为人工智能培养人才和利用人工智能变革教育两方面都作了大量的探索.鼓励领先企业.行业服务机构与各级各类学校共建人工智能人才培养体系,协同搭建教师挂职锻炼.产学研合作等人工智能领域训练平台等 ...

  6. ARM嵌入式Linux系统设计与开发

    ARM嵌入式Linux系统设计与开发 基本信息 作者: 俞辉    李永    刘凯    王晓虹    丛书名: 高等院校计算机教材系列 出版社:机械工业出版社 ISBN:9787111300045 ...

  7. arm分支指令c语言,ARM嵌入式系统教与学(教学大纲)

    原标题:ARM嵌入式系统教与学(教学大纲) <ARM 嵌入式系统结构与编程> 课程教学大纲 学分 3 学时 32+24 01 课程说明 通过本课程的学习,培养学生掌握 ARM 体系结构,A ...

  8. 基于ARM嵌入式工控机主板的人机界面组态软件开发方案

    本文介绍基于ARM单片机的嵌入式控制系统的人机界面组态软件开发方案,嵌入式系统具有RS232,RS485串口,单片机TTL电平串口,I2C通讯接口,以太网接口,无线通讯,U盘存储,语音播放等功能.可以 ...

  9. 2012 ARM嵌入式开发应用研讨会杂谈

    记得以前参加的ARM的研讨会,名称是技术研讨会,不知道为什么现在改名为嵌入式开发应用研讨会了.不过今年演讲的重点就是 ARM DS-5开发工具(还免费发放了一本<Linux/Android开发利 ...

最新文章

  1. 实战Jenkins+SVN+tomcat持续集成发布
  2. python将字符转换为字典
  3. C#异步编程(一):异步基础
  4. Spring MVC3 Hibernate CRUD示例应用程序
  5. 执行文件异常报错:ImportError: attempted relative import with no known parent package
  6. 科学数据中心资源和用户访问控制体系
  7. 没想到你是这样的Nginx!
  8. guava cache reload返回新旧值解析
  9. 使用 Anthem.NET 的常见回调(Callback)处理方式小结
  10. 图神经网络(GCN)
  11. 基于visual Studio2013解决C语言竞赛题之1064互质数差1验证
  12. 题目 1097: 蛇行矩阵
  13. 华为鸿蒙0系统桌面图标不能移动,win10桌面图标无法移动怎么办_win10为什么不能拖动桌面图标...
  14. Linux基础系列—Linux体系结构和Linux内核结构
  15. eja变送器故障代码al01_EJA的差压变送器三种常见故障
  16. Kotlin协程在项目中的实际应用
  17. 十二个“一”的假想人物设定
  18. 推荐一款血液透析机专用非易失性Everspin MRAM芯片
  19. 计算机二级浙江省word,浙江省计算机二级办公软件word
  20. 网站打开速度慢的原因,排查方法及优化方法(大全)

热门文章

  1. SAP ABAP修改字段描述(翻译及传输)
  2. 计算机如何解锁访问,win7 documents and settings文件夹怎么解锁访问
  3. java余弦相似度算法_余弦相似度计算
  4. PytorchKeras CIFAR10图像分类(详情介绍以及汇总所有博客)
  5. 【总结】开发基于XMPP协议的通讯工具
  6. PHP 微信公众号发红包
  7. CSS3 网格布局(grid-layout)基础知识 - 弹性尺寸的定义单位:fr 简介及实例
  8. Excel如何快速从邮箱中提取QQ号码
  9. 浅谈Api 签名算法
  10. css中文字闪烁这么实现,css3实现文字闪烁,改变透明度