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

news2024/11/19 0:52:59

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_H
	void input(int *a, int *b);
	int calcu(int a, int b);
#endif

-c 是不链接生成 .o

## Makefile
main: main.o clc.o
	gcc -o main main.o input.o calcu.o
main.o: main.c
	gcc -c main.c 
clc.o: clc.c
	gcc -c clc.c

clean:
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.coloradmin.cn/o/1204666.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

应急响应练习2

目录 1. 请提交攻击者的ip与系统版本 2. 攻击者通过某个组件漏洞获得服务器权限&#xff0c;请提交该组件的名称 3. 请提交攻击者首次攻击成功的时间 4. 请提交攻击者上传的webshell文件绝对路径 5. 请提交攻击者使用的webshell管理工具 6. 攻击者进一步留下的免杀的webs…

数据结构—数组栈的实现

前言&#xff1a;各位小伙伴们我们前面已经学习了带头双向循环链表&#xff0c;数据结构中还有一些特殊的线性表&#xff0c;如栈和队列&#xff0c;那么我们今天就来实现数组栈。 目录&#xff1a; 一、 栈的概念 二、 栈的实现 三、 代码测试 栈的概念&#xff1a; 栈的概念…

互联网医院牌照|互联网医院牌照办理小知识

随着互联网技术的快速发展&#xff0c;互联网医院牌照已经成为医疗行业的一个重要资质&#xff0c;我们致力于为您提供最优质的服务&#xff0c;帮助您的公司或产品顺利获得此牌照。 一、产品特性描述 1、专业性&#xff1a;我们的团队由经验丰富的顾问组成&#xff0c;对互联…

Redis 连接不上 WRONGPASS invalid username-password pair

1.我的RedisDesktopManager 可以连接 但是 Springboot远程使用Redis就是连不上 2.我的密码是 abc123.. 多了英文的 ..符号 在Springboot过不了&#xff0c;所以Redis密码尽量字母数字&#xff0c;不要其他符号

洛谷P1923 【深基9.例4】求第 k 小的数(java)

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.StreamTokenizer; import java.util.Arrays; import java.util.Scanner; //输入n个数字ai&#xff0c;输出这些数字的第k小的数。最小的数是第0小。 public cla…

IP-guard WebServer 命令执行漏洞复现

简介 IP-guard是一款终端安全管理软件&#xff0c;旨在帮助企业保护终端设备安全、数据安全、管理网络使用和简化IT系统管理。在旧版本申请审批的文件预览功能用到了一个开源的插件 flexpaper&#xff0c;使用的这个插件版本存在远程命令执行漏洞&#xff0c;攻击者可利用该漏…

SAP 60策略测试简介

前面我们已经测试了10.11.20.40.50.52策略的测试&#xff0c;下面我们会测试一下60的策略&#xff0c;我们把60策略和50的策略进行一个比较&#xff0c;先看下后台的配置上面有什么不一样的地方。 首先是50策略 我们看到60策略里面很多地方都显示有计划物料&#xff0c;所以我…

链表相关部分OJ题

&#x1f493;作者简介&#x1f44f;&#xff1a;在校大二迷茫大学生 &#x1f496;个人主页&#x1f389;&#xff1a;小李很执着 &#x1f497;系列专栏&#xff1a;Leetcode经典题 每日分享&#xff1a;人总是在离开一个地方后开始原谅它❣️❣️❣️———————————…

基于php+thinphp+vue的教材管理系统

运行环境 开发语言&#xff1a;PHP 数据库:MYSQL数据库 应用服务:apache服务器 使用框架:ThinkPHPvue 开发工具:VScode/Dreamweaver/PhpStorm等均可 项目简介 教材管理系统&#xff0c;主要的模块包括首页、个人中心、学生管理、老师管理、教材征订管理、教师教材退订管理、…

基于RK3568新零售智能售货柜解决方案

I 方案简介 新零售智能售货柜解决方案&#xff1a; 无人零售除了无人货架外&#xff0c;自动售货机仍是亮点。但仍有很多人认为自动售货机已经过时&#xff0c;不会成为新零售领域的新星。 随着手机支付、人脸支付不断普及&#xff0c;智能售卖不断的推陈出新&#xff0c;无人…

【赠书第5期】AI时代项目经理成长之道:ChatGPT让项目经理插上翅膀

文章目录 前言 1 ChatGPT为项目经理带来便利 2 提供自动化的通知和提醒 3 提供数据分析和可视化 4 结论 5 推荐图书 6 粉丝福利 前言 在现代商业环境中&#xff0c;项目经理需要具备高度的灵活性和响应能力。而现在&#xff0c;随着技术的不断提升和新工具的涌现&#…

使用百度语音识别技术实现文字转语音的Java应用

探讨如何使用百度语音识别技术将文字转换为语音的Java应用。百度语音识别技术是一种强大的语音识别服务&#xff0c;可以将输入的文字转换为自然流畅的语音输出。我们将使用Java编程语言来实现这个应用&#xff0c;并提供相应的源代码。 首先&#xff0c;我们需要准备一些前提…

适用于WPF的设计模式

适用于WPF的设计模式 讨论“XAML能不能写逻辑代码”这个问题。我发现这是个有歧义的问题。这个问题可以有两种意思&#xff1a; XAML能不能用来写逻辑代码&#xff1f; XAML文件里能不能包含逻辑代码&#xff1f; 对于第一种意思——XAML是一种声明性语言&#xff0c;就是用来…

开发企业微信群机器人,实现定时提醒

大家好&#xff0c;我是鱼皮&#xff0c;今天分享一个用程序解决生活工作问题的真实案例。 说来惭愧&#xff0c;事情是这样的&#xff0c;在我们公司&#xff0c;每天都要轮流安排一名员工&#xff08;当然也包括我&#xff09;去楼层中间一个很牛的饮水机那里接水。但由于大…

JDK更换版本不生效问题

JDK版本更换 问题: 当本地电脑拥有多个版本jdk时, 切换jdk版本不生效 解决方案: 1.查看环境变量(高版本的jdk安装时自动注入环境变量) 2.将Path里面的jdk的bin配置上移到最上面 3.查看jdk版本, java -version 启动项目,显示如下使用了jdk17

“第六十七天”

各位&#xff0c;昨天查找子串的方法想起来了&#xff0c;就是那个KMP算法......自己理解都有点困难&#xff0c;还看看能不能想一下&#xff0c;确实很困难啊。 不要忘了toupper函数和tolower函数不是直接改变字符的大小写&#xff0c;而是返回对应的大小写的值&#xff0c;需…

设计模式—结构型模式之代理模式

设计模式—结构型模式之代理模式 代理模式(Proxy Pattern) ,给某一个对象提供一个代理&#xff0c;并由代理对象控制对原对象的引用,对象结构型模式。 静态代理 比如我们有一个直播平台&#xff0c;提供了直播功能&#xff0c;但是如果不进行美颜&#xff0c;可能就比较冷清…

activiti7审批驳回,控制变量无法覆盖,导致无限循环驳回,流程无法结束

项目开发过程中使用工作流&#xff0c;因此考虑使用activiti7做完工作流引擎。项目开发过程中&#xff0c;发现流程驳回时&#xff0c;再次执行流程&#xff0c;控制变量无法覆盖&#xff0c;导致无限循环驳回&#xff0c;流程无法结束。流程图如下图所示&#xff1a; 驳回控制…

2023年数维杯国际大学生数学建模挑战赛

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题。 cs数模团队在数维杯前为大家提供了许多资料的内容呀&#xff0…

kubernetes--Pod进阶

目录 一、资源限制&#xff1a; 1. 资源限制的两种规范&#xff1a; 2. Pod 和 容器 的资源请求和限制&#xff1a; 3. CPU 资源单位&#xff1a; 4. 内存资源单位 &#xff1a; 5. 资源限制示例&#xff1a; 二、健康检查&#xff1a;探针&#xff08;Probe&#xff09; 1. 探…