Linux编程  使用gcc编译C程序
上面介绍了gcc编译器进行C语言源代码编译时的一些基础知识,将以多个实例来介绍如何使用gcc编译器对C语言进行编译。并介绍gcc编译器存在的错误类型及解决错误的基本方法。
1.使用gcc编译C语言代码
从上面介绍可以知道使用gcc编译器编译C语言代码时的命令为gcc,首先创建一个test.c文件,并在该文件中写入以下内容:
#include <stdio.h>
int main()
{
  printf("你好!");
return 0;
}
接下开打开终端窗口,进入到该文件所在目录,并输入下面的命令:
gcc -o mytest test.c
上述命令执行完毕后,会在该源文件所在目录下生成一个新文件,该文件名称为mytest,该文件就是编译过的可执行文件,在终端容器中再次输入以下命令:
./mytest
该命令执行编译后的文件,源文件中程序运行结果在终端窗口中显示出来:
你好!
通过上面步骤可以看到使用gcc编译器的一般方法,下面再列举一例来熟悉gcc的使用方法。创建一个新文件test2.c,并在文件中写入如下内容:
#include <stdio.h>
int main()
{
  int sum=0;
    int i=1;
  for(i;i<=100;n++)
    sum=sum+i;
  printf("最后结果为:%d",sum);
  return 0;
}
打开终端窗口使用下面的命令对该文件进行编译:
gcc -o mytest2 mytest2.c
编译完毕后产生一个mytest2可执行文件,使用下面的命令执行该文件:
./mytest2
执行完命令后,可以看到结果为:
最后结果为:5050
下面一个实例是使用gcc编译两个源文件,成为一个计算机阶乘的程序。首先是阶乘计算函数fun.c:
#include <stdio.h>
int fun(int n)
{ if(n<=1)
return 1;
else
return fun(n-1)*n;
接下来编写主函数main.c:
#include <stdio.h>
int fun(int n);
c语言编译器怎么用?int main(int argc,char **argv)
{int n;
If(argc<2){printf("Usge:%s n",argv[0]);
return -1;}
else
{n=atoi(argv[1]);
printf("%d的阶乘是:%d",n,fun(n));
}
}
编译时可以使用如下命令:
gcc -o func main.c fun.c
编译完成后,使用下面的命令执行并显示结果:
./func 5
5的阶乘是:120
2.gcc的错误类型及对策
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)未定义符号
错误信息:i未声明(在此函数内第一次使用)。这类错误是在连接过程中出现的,可能有两种原因:一是使用者自己定义的函数或者全局变量所在源代码文件,没有被编译、连接,或者干脆还没有定义,这需要使用者根据实际情况修改源程序,给出全局变量或者函数的定义体;二是未定义的符号是一个标准的库函数,在源程序中使用了该库函数,而连接过程中还没有给定相应的函数库的名称,或者是该档案库的目录名称有问题,这时需要使用档案库维
护命令ar检查我们需要的库函数到底位于哪一个函数库中,确定之后,修改gcc连接选项中的-l和-L项。
排除编译、连接过程中的错误,应该说这只是程序设计中最简单、最基本的一个步骤,可以说只是开了个头。这个过程中的错误,只是在使用C语言描述一个算法中所产生的错误,是比较容易排除的。一个程序,到编译、连接通过为止,应该说刚刚开始,程序在运行过程中所出现的问题,还需要更加深入地测试、调试和修改。稍为复杂的程序,往往要经过多次的编译、连接和测试、修改,用户在学习中应该不断提高程序的维护和调试能力。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。