ZYNQ实验--Petalinux--Linux C 编程入门

Linux C 编程入门

   在 Windows 下我们可以使用各种各样的 IDE 进行编程,比如强大的 Visual Studio。Ubuntu 下也有一些可以进行编程的工具,但是大多都只是编辑器,也就是只能进行代码编辑,如果要编译的话就需要用到 GCC 编译器,使用 GCC 编译器肯定就要接触到 Makefile。本文就讲解如何在 Ubuntu 下进行 C 语言的编辑和编译、GCC 和 Makefile的使用和编写。

实验环境: Ubuntu Linux 16.04.3,VIM编辑器

GCC基础 Hello World!

VIM 准备

  1. 安装VIM
    VIM 编辑器都是一种基于指令式的编辑器,使用键盘来完成所有的编辑工作。
sudo apt-get install vim
  1. 设置VIM(方便C代码编写)
    VI 编辑器默认 TAB 键为 8 空格,我们改成 4 空格,并且显示行号。用 vi 打开文件/etc/vim/vimrc
    在这里插入图片描述
    在该文件的最下面插入最后面输入如下代码:
    set ts=4
    set nu
    (如果权限不够保存的用root)
    在这里插入图片描述

编写代码

  这里可以新建一个文件夹将我们的文件存在其中方便管理,然后在该文件下使用vi命令新建一个c文件。
在这里插入图片描述
输入代码,保存文件
在这里插入图片描述

编译代码

Ubuntu 下的 C 语言编译器是 gcc,使用 gcc 编译器来编译 main.c,当编译完成以后会生成一个 a.out 文件,这个 a.out 就是编译生成的可执行文件。
在这里插入图片描述
a.out 这个文件名是 GCC 编译器自动命名的,在使用 gcc 命令的时候加上-o 来指定生成的可执行文件名字,比如编译 main.c 以后生成名为“main”的可执行文件
在这里插入图片描述

执行代码

执行的方法很简单使用命令:“./可执行文件”,比如本例程就是命令:./a.out
在这里插入图片描述

编译流程

GCC 编译器的编译流程是:预处理、汇编、编译和链接。

  1. 预处理:预处理器会先处理源文件,处理后的文件包括头文件内容、宏定义、条件编译等,生成一个中间文件,以供编译器使用。
  2. 编译:编译器会将预处理后的文件进行编译,生成汇编代码。
  3. 汇编:汇编器会将编译器生成的汇编代码转化成机器码,生成目标文件。
  4. 链接:是将多个目标文件(经过编译和汇编生成的文件)合并成一个可执行文件的过程。在链接过程中,链接器会解决函数和变量之间的引用关系,将它们正确地连接在一起。包括静态链接和动态链接两种方式。

Makefile 基础

Makefile

  通过在终端执行 gcc 命令来完成 C 文件的编译,如果我们的工程只有一两个 C 文件还好,需要输入的命令不多,当文件有几十、上百甚至上万个的时候用终端输入 GCC 命令的方法显然是不现实的。
  工程编译的工具:Make,描述哪些文件需要编译、哪些需要重新编译的文件就叫做 Makefile。这个文件描述了编译哪些源码文件、如何编译,每次需要编译工程的时只需要使用这个文件。Makefile 就跟脚本文件一样,Makefile 里面还可以执行系统命令。在 Linux 下用的最多的是 GCC 编译器,这是个没有 UI 的编译器,因此 Makefile 就需要我们自己来编写了。在 Linux 下需要学会使用 Makefile,再就是通过 Makefile 了解整个工程的处理过程。

Makefile 编写

将main.c 修改为输入两个数字计算和为多少
在这里插入图片描述
创建clc.c和clc.h实现功能

##clc.c
#include <stdio.h>
#include "clc.h"void inputvi(int *a, int *b){printf("input two num:");scanf("%d %d", a, b);printf("\r\n");}int calcu(int a, int b){return (a + b);}##clc.h
#ifndef _CLC_H
#define _CLC_Hvoid input(int *a, int *b);int calcu(int a, int b);
#endif

Makefile中 -c 是不链接生成 .o,编写时缩进要用TAB

## Makefile
main: main.o clc.ogcc -o main main.o input.o calcu.o
main.o: main.cgcc -c main.c 
clc.o: clc.cgcc -c clc.cclean:
rm *.o
rm main

Makefile 执行

如果我们只修改clc.c那么make时只会重新生成clc.o
在这里插入图片描述
如果在代码正确的情况下出现错误
在这里插入图片描述

  1. Makefile 中命令缩进没有使用 TAB 键
  2. VIM 编辑器使用空格代替了 TAB 键,修改文件/etc/vim/vimrc,在文件最后面加上如下所示代码:set noexpandtab

参考资料

  1. 正点原子 《领航者 ZYNQ 之嵌入式 Linux 开发指南》
  2. ZYNQ7020教程《ZYNQ 开发平台 Linux 应用教程》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/176149.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Protobuf 语法

Protobuf语法 1.1.1. 基本规范 文件以.proto做为文件后缀&#xff0c;除结构定义外的语句以分号结尾 结构定义可以包含&#xff1a;message、service、enum rpc方法定义结尾的分号可有可无 Message命名采用驼峰命名方式&#xff0c;字段命名采用小写字母加下划线分隔方式 …

如何使用内网穿透实现远程公网访问windows node.js的服务端

使用Nodejs搭建简单的web网页并实现公网访问 前言 Node.js是建立在谷歌Chrome的JavaScript引擎(V8引擎)的Web应用程序框架。 Node.js自带运行时环境可在Javascript脚本的基础上可以解释和执行(这类似于JVM的Java字节码)。这个运行时允许在浏览器以外的任何机器上执行JavaScri…

轻量封装WebGPU渲染系统示例<31>- 若干线条对象(源码)

线条对象包括: AABB包围盒&#xff0c;OBB包围盒, 曲线&#xff0c;直线&#xff0c;圆&#xff0c;坐标轴&#xff0c;视锥体线框&#xff0c;方形网格等。 当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/LineOb…

go学习之接口知识

文章目录 接口1.接口案例代码展示2.基本介绍3.基本语法4.应用场景介绍5.注意事项和细节6.接口编程经典案例7.接口与继承之间的比较8.面向对象编程--多态1&#xff09;基本介绍2&#xff09;快速入门3&#xff09;接口体现多态的两种形式 9.类型断言1&#xff09;先看一个需求2&…

Ladybug 全景相机, 360°球形成像,带来全方位的视觉体验

360无死角全景照片总能给人带来强烈的视觉震撼&#xff0c;有着大片的既视感。那怎么才能拍出360球形照片呢&#xff1f;它的拍摄原理是通过图片某个点位为中心将图片其他部位螺旋式、旋转式处理&#xff0c;从而达到沉浸式体验的效果。俗话说“工欲善其事&#xff0c;必先利其…

RabbitMq防止消息丢失

RabbitMq防止消息丢失 消息的传递路径出现消息丢失的位置解决 消息的传递路径 消息发送方 --> MQ --> 消息消费方 出现消息丢失的位置 消息发送方: 消息传输过程中丢失MQ: MQ收到消息后,存在内存中,还未被消费就宕机了,导致数据丢失消息消费方: 消息到达消费方后, 服务…

css实现元素四周阴影

前言 首先确定的是需要使用box-shadow这一属性 语法如下&#xff1a; box-shadow: h-shadow v-shadow blur spread color inset; h-shadow&#xff1a;表示水平方向上的阴影偏移量&#xff0c;必须指明&#xff0c;可以是正数、负数、0&#xff0c;如果为正数左方有阴影&…

【机器学习基础】机器学习入门(1)

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;机器学习 欢迎订阅&#xff01;后面的内容会越来越有意思~ &#x1f4a1;专栏介绍&#xff1a; 本专栏的第一篇文章&#xff0c;当然要介绍一下了~来说一下这个专栏的开…

教资笔记(目录)

目录 中小学教资笔记总结中学教资小学教资小学中学科一《综合素质》&#xff08;通用&#xff09;&#xff1a;考情分析&#xff1a;学习笔记 小学科二《教育知识与能力》&#xff1a;考情分析&#xff1a;学习笔记&#xff1a; 中小学教资笔记总结 2023.9.16教资考试 笔试成绩…

优雅的Java编程:将接口对象作为方法参数

theme: smartblue 目录 概述 在Java编程中&#xff0c;方法的参数传递方式通常是通过基本类型、对象引用或者集合等方式。然而&#xff0c;一种更加优雅且灵活的设计模式是将接口对象作为方法的参数。这种方式为我们带来了许多好处&#xff0c;包括降低耦合性、实现多态性和可…

518抽奖软件,支持年会现场中途临时加奖项

518抽奖软件&#xff0c;支持年会现场中途临时加奖项。 518抽奖软件简介 518抽奖软件&#xff0c;518我要发&#xff0c;超好用的年会抽奖软件&#xff0c;简约设计风格。 包含文字号码抽奖、照片抽奖两种模式&#xff0c;支持姓名抽奖、号码抽奖、数字抽奖、照片抽奖。(www.…

FFmpeg开发简介1

适逢FFmpeg6.1发布&#xff0c;准备深入学习下FFmpeg&#xff0c;将会写下系列学习记录。 在此列出主要学习资料&#xff0c;后续再不列&#xff0c;感谢这些大神的探路和分享&#xff0c;特别是雷神&#xff0c;致敬&#xff01; 《FFmpeg从入门到精通》 《深入理解FFmpeg》 …