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 应用教程》
相关推荐
Olrookie8 分钟前
MySQL运维常用SQL
运维·数据库·sql·mysql·dba
hweiyu0033 分钟前
Linux运维实战:云原生设计与实施Docker&K8S(视频教程)
linux·运维·云原生
ll57764433233 分钟前
从局部优化到全局赋能DevOps在云原生时代的核心价值演进与实践路径探析
c语言
blackorbird35 分钟前
使用 Overpass Turbo 查找监控摄像头
运维·服务器·数据库·windows
海棠蚀omo1 小时前
Linux操作系统-命令行参数及环境变量
linux·操作系统
Yurko131 小时前
【C语言】环境安装(图文)与介绍
c语言·开发语言·学习
仲星(._.)1 小时前
C语言:字符函数和字符串函数
c语言·开发语言
小白不想白a1 小时前
【shell】每日shell练习(系统用户安全审计/系统日志错误分析)
linux·运维·云原生
码猫Mrr1 小时前
创维E900V22D刷入armbian hdmi开机花屏和网络无法使用 解决方式【亲测】
linux·armbian·e900v22d
SelectDB技术团队1 小时前
Apache Doris 与 ClickHouse:运维与开源闭源对比
运维·clickhouse·apache