zoukankan      html  css  js  c++  java
  • 迅为IMX6ULL开发板Ubuntu下C编程入门(一)

    本篇段俩部分3.1 Linux下编写第一个 C C 程序,3.2gcc 编译器

    我们在 Windows 下使用 C 语言开发的时候,一般都会有支持 Windows 的开发工具,比如我们学习 51 单片机或者 STM32,所使用的的 Keil 开发软件。此类开发工具一般都会集编辑、编译于一体,我们只需要编辑好代码,电机开发工具的编译按钮,就可以自动为我们编译出可执行的二进制文件了。Ubuntu 下的 C 语言开发与 Windows 下的 C 语言开发不一样的,并没有图形界面的开发工具,而且编辑和编译是分开的。我们需要使用文本编辑软件先编写代码,然后使用编译工具(GCC)来编译,最终生成可执行的二进制文件。如果我们的工程中有多个源文件,在编译的时候我们通常会通过 Makefile 文件来管理整个工程的源文件。本章我们来学习如何在 Ubuntu 下进行 C 语言成的编辑,GCC 编译,Makefile 文件的使用。通过本章学习我们可以掌握 Linux 下的 C 语言开发基本方法,为后面的学习做好准备。
    3.1 Linux  下编写第一个 C C 程序 程序
    本章节开始的部分我们介绍了 Ubuntu 下 C 程序开发分成两部分:编辑和编译。Ubuntu 下有很多种文本编辑的工具,如 vim、Gedit、Emacs,这里我们使用前面章节介绍的 vim 文本编辑工具来编辑 C 程序。相信大家在学习 C 语言的时候都是从“Hello World”这个程序开始的吧,下面我们通过这个程序,来学习下 Linux下 C 程序开发的流程。
    3.1.1  代码编写
    首先我们在用户根目录下建立文件夹“work”,用于保存所有 C 语言的程序,运行结果如下图所示:

     

    然后进入创建的文件夹 work,为了方便管理,我们每个例程都创建单独的文件夹,首先我们创建文件夹“hello_world”来保存我们的第一个 C 程序,如下图所示:

     

    然后进入上图中的 hello_world 文件夹,使用 vi 命令新建文件“main.c”,然后在里面输入下面的代码:
    #include
    int mian(int argc, char *argv[])
    {
    printf("Hello World! ");
    return 0;
    }
    编写完以后保存并退出 vim 编辑器,然后可以使用 cat 命令查看代码是否保存成功,如下图所示:

     

    通过上图可以看到代码已经编辑完成了。
    3.1.2  代码编译
    Ubuntu 下使用 gcc 编译器来编译 C 程序,我们在安装 Ubuntu 系统的时候,gcc 编译器 morning 安装好了,我们可以在终端输入“gcc -v”来查看下 gcc 的版本,如下图所示:

     

    通过上图可以看到 gcc 的版本信息,说明我们的 Ubuntu 上已经安装了 gcc 编译器了,下面我们来看看怎么通过 gcc 编译我们的第一个 C 程序,我们在终端输入“gcc main.c -o main”,然后回车,会生成 main 文件,如下图所示:

     

    在上面的“gcc main.c -o main”这个命令里面“-o“用来指定编译生成的文件名字,我们指定的是 main,所以在图 3.1.2.2 中可以看到生成了文件“main”,如果我们想生成其它的文件名字,我们只需要修改“-o”后面的 main(修改成您希望生成的文件名字)。经过前面的步骤已经生成了可执行文件 main,现在我们演示下在终端如何运行一个可行性的程序,我们直接在终端当前目录下(可执行文件所在的目录下)输入“./main”,然后回车,就可以运行可执行文件 main 了,运行结果如下图所示:

     

    在上图中运行的命令“./main”,其中的“./”代表当前目录下。我们可以看到在终端打印出了 HelloWorld!。至此,Linux 下的 C 语言编辑和编译的一整套流程我们就介绍完了。
    3.2 c gcc 编译器 编译器
    3.2.1 gcc  命令分析
    在 3.1 节我们已经使用 gcc 编译了 Linux 下的第一个 C 程序,gcc 命令的格式如下:
    gcc [参数] [文件名]
    主要参数说明如下:
    -c 编译、汇编到目标代码(.o),不链接成可执行文件
    -g 生成调试信息
    -o 编译完成后生成的文件名,如果不使用该选项,默认生成 a.out 文件
    -O 对程序进行优化编译,产生的可执行文件执行效率高
    -w 不生成任何警告
    -S 仅编译到汇编语言,不进行汇编和链接


    3.2.2  编译警告错误处理
    我们是 Windows 下使用 Keil 或者其他开发工具,在编译的时候,如果程序有错误,开发工具会提示出具体的错误信息,可以很方便的定位到问题点,快速的修改出现的问题,gcc 同样也有类似的功能,下面我们来看下 gcc 的错误提示功能,首先我们在 work 目录下建立文件夹“test2”,然后使用 vim 在 test2 文件夹创建 main.c 文件夹,在 main.c 文件输入如下代码:
    #include
    int main(int argc, char *argv[])
    {
    int a;
    a = 1
    printf("a= ", a);
    return 0;
    }
    上面代码有两处错误:
    第 7 行 最后缺少“;”
    第 9 行 printf 语法不对,应该为:printf("a =%d ", a);
    我们使用 gcc 编译 main.c,可以看到 gcc 会提示错误信息,如下图所示:

     

    从上图中可以看到在 mian.c 文件的第 9 行 printf 前面缺少“;”我们在第 7 行“a = 1”后面加上“;”,然后继续编译,如下图所示:

     

    从上图可以看出编译提示语法格式不对,我们把第 9 行修改成“printf("a=%d ", a);”,然后在继续编译,如下图所示:

     

    我们可以看到这次 gcc 编译通过,最终生成了文件 main。我们在终端执行 main,运行结果如下图所示:

     
    从上图可以看到运行的结果和我们涉及到额结果一致,通过本例程可以看到 gcc 编译器不仅可以检测出
    程序的错误,而且还会标记处错误在哪个文件的哪一行,很方便的帮助我们去修改问题。

    更多内容关注:
     

    详情了解:https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.34851debJbM0Ye&ft=t&id=614020183147&qq-pf-to=pcqq.c2c

  • 相关阅读:
    mybatis 调用mysql存储过程 带输出输入参数
    MyBatis 通过包含的jdbcType类型和java中对应的数据类型
    大型网站架构之分布式消息队列
    加密解密(2)*客户端,服务器,CA(Certificate Authority),公钥,私钥,证书,签名,验证
    AlertDialog与DialogFragment
    从日期对象中获取(年份、月份、日期、时间等数字)
    LayoutInflater的获取方式
    php——会话控制
    什么是虚假唤醒 spurious wakeup
    Linux互斥锁、条件变量和信号量
  • 原文地址:https://www.cnblogs.com/liyue3/p/12936681.html
Copyright © 2011-2022 走看看