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 编辑器都是一种基于指令式的编辑器,使用键盘来完成所有的编辑工作。
powershell 复制代码
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实现功能

c 复制代码
##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

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

c 复制代码
## 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 应用教程》
相关推荐
Zevalin爱灰灰9 分钟前
Linux入门第一部分(Ubuntu入门篇) 第三章 shell脚本入门(一)
linux·ubuntu·嵌入式
丘山望岳11 分钟前
Linux基础指令入门篇
linux·运维·服务器
笨笨饿15 分钟前
#143_屏幕画撕裂的问题及解决方法
linux·stm32·单片机·嵌入式硬件·mcu·lvgl·嵌入式实时数据库
小年糕是糕手23 分钟前
【AI】用 Python 做一个 AI 截图检索助手:把收藏夹里的截图找回来
linux·人工智能·python·chatgpt·agent·codex·deepseek
another heaven27 分钟前
【C/C++ C++ 新特性中的那些内存优化的特性】
c语言·开发语言·c++
hhhjhl28 分钟前
Zod 跨端三方库仓颉适配全流程
linux·运维·ubuntu
翔云12345630 分钟前
Gaea(小米MySQL Proxy)整体架构
运维·数据库·mysql
程序员清风32 分钟前
LibreChat 实战:用 Docker 搭建可扩展的多模型对话平台
运维·docker·容器
志栋智能38 分钟前
安全超自动化如何提升防御体系可靠性?
运维·安全·自动化
叼烟扛炮42 分钟前
Linux 学习笔记(三十二):线程控制——创建、等待与分离
linux·运维·服务器·笔记·学习·1024程序员节