博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【linux基础】教你解决GCC错误
阅读量:4282 次
发布时间:2019-05-27

本文共 1213 字,大约阅读时间需要 4 分钟。

Gcc编译器如果发现源程序中有错误,就无法继续进行,也无法生成最终的可执行文件。为了便于修改,gcc给出错误资讯,我们必须对这些错误资讯逐个进行分析、处理,并修改相应的语言,才能保证源代码的正确编译连接。gcc给出的错误资讯一般可以分为四大类,下面我们分别讨论其产生的原因和对策。

1. 第一类∶C语法错误

错误资讯∶文件source.c中第n行有语法错误(syntex errror)。这种类型的错误,一般都是C语言的语法错误,应该仔细检查源代码文件中第n行及该行之前的程序,有时也需要对该文件所包含的头文件进行检查。有些情况下,一个很简单的语法错误,gcc会给出一大堆错误,我们最主要的是要保持清醒的头脑,不要被其吓倒,必要的时候再参考一下C语言的基本教材。

2. 第二类∶头文件错误

错误资讯∶找不到头文件head.h(Can not find include file head.h)。这类错误是源代码文件中的包含头文件有问题,可能的原因有头文件名错误、指定的头文件所在目录名错误等,也可能是错误地使用了双引号和尖括号。

3. 第三类∶档案库错误

错误资讯∶连接程序找不到所需的函数库,例如∶

ld: -lm: No such file or directory

这类错误是与目标文件相连接的函数库有错误,可能的原因是函数库名错误、指定的函数库所在目录名称错误等,检查的方法是使用find命令在可能的目录中寻找相应的函数库名,确定档案库及目录的名称并修改程序中及编译选项中的名称。

4. 第四类∶未定义符号

错误资讯∶有未定义的符号(Undefined symbol)。这类错误是在连接过程中出现的,可能有两种原因∶一是使用者自己定义的函数或者全局变量所在源代码文件,没有被编译、连接,或者干脆还没有定义,这需要使用者根据实际情况修改源程序,给出全局变量或者函数的定义体;二是未定义的符号是一个标准的库函数,在源程序中使用了该库函数,而连接过程中还没有给定相应的函数库的名称,或者是该档案库的目录名称有问题,这时需要使用档案库维护命令ar检查我们需要的库函数到底位于哪一个函数库中,确定之后,修改gcc连接选项中的-l和-L项。

排除编译、连接过程中的错误,应该说这只是程序设计中最简单、最基本的一个步骤,可以说只是开了个头。这个过程中的错误,只是我们在使用C语言描述一个算法中所产生的错误,是比较容易排除的。我们写一个程序,到编译、连接通过为止,应该说刚刚开始,程序在运行过程中所出现的问题,是算法设计有问题,说得更玄点是对问题的认识和理解不够,还需要更加深入地测试、调试和修改。一个程序,稍为复杂的程序,往往要经过多次的编译、连接和测试、修改。下面我们学习的程序维护、调试工具和版本维护就是在程序调试、测试过程中使用的,用来解决调测阶段所出现的问题。

 

本文转载于,【linux基础】教你解决GCC错误

(出处: )

你可能感兴趣的文章
Redis GEO 的java实现(通过Jedis)(GIS相关)
查看>>
聊聊性能:全链路压测 overview
查看>>
Java+Maven+selenium+testng+reportng自动化测试框架(简易搭建说明)
查看>>
WEB模糊查询注意的问题(排除%等通配符并支持不连续关键字查询)
查看>>
PostgreSQL中表的阶层数据取得方法
查看>>
如何用产品思维迭代项目管理流程?(创业有感)
查看>>
Linux ALSA 声卡驱动之一:ALSA架构简介
查看>>
Linux ALSA 声卡驱动之二:声卡的创建
查看>>
Linux ALSA 声卡驱动之三:PCM设备的创建
查看>>
Linux ALSA 声卡驱动之四:Control设备的创建
查看>>
Linux ALSA 声卡驱动之五:移动设备中的ALSA(ASoc)
查看>>
Linux ALSA 声卡驱动之六:ASoc架构中的Machine
查看>>
Linux ALSA 声卡驱动之七:ASoc中的Codec
查看>>
android电池系统
查看>>
android4.x 耳机插拔检测机制
查看>>
Android 4.x耳机插拔检测实现方法
查看>>
android修改开机动画和铃声
查看>>
android audio音量控制流程
查看>>
解密回声消除技术之一(理论篇)
查看>>
Speex编解码在Android上实现
查看>>