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 应用教程》
相关推荐
Wanliang Li11 分钟前
Linux电源管理——CPU Hotplug 流程
linux·嵌入式硬件·嵌入式·armv8·电源管理·cpuhotplug
fnd_LN18 分钟前
Linux文件目录 --- mkdir命令,创建目录,多级目录,设置目录权限
linux·运维·服务器
会飞的土拨鼠呀28 分钟前
Flannel是什么,如何安装Flannel
运维·云原生·kubernetes
木与子不厌30 分钟前
微服务自定义过滤器
运维·数据库·微服务
析木不会编程35 分钟前
【C语言】动态内存管理:详解malloc和free函数
c语言·开发语言
达帮主36 分钟前
7.C语言 宏(Macro) 宏定义,宏函数
linux·c语言·算法
行思理1 小时前
Linux 下SVN新手操作手册
linux·运维·svn
茶猫_1 小时前
力扣面试题 39 - 三步问题 C语言解法
c语言·数据结构·算法·leetcode·职场和发展
初学者丶一起加油1 小时前
C语言基础:指针(数组指针与指针数组)
linux·c语言·开发语言·数据结构·c++·算法·visual studio
沛沛老爹2 小时前
CI/CD是什么?
运维·git·ci/cd