本文源自韦东山老师的课程,如果侵权立马删除
已经获取了韦东山老师的所有代码:
此时会看到韦东山老师的hello.c代码:
1. 基本的 Hello World 程序
#include <stdio.h>
/*
* 程序说明:
* 这个程序接收命令行参数并打印问候语。
* 如果传入了名字作为参数,程序会输出 "Hello, [名字]!"。
* 如果没有提供名字参数,程序则输出 "Hello, world!"。
*/
/*
* 主函数
* argc: 命令行参数的数量
* argv: 指向字符指针的数组(即字符串数组),包含命令行参数
*/
int main(int argc, char **argv) {
// 检查是否至少输入了一个参数
if (argc >= 2) {
// 如果有提供参数,打印 Hello, [参数] 的格式
printf("Hello, %s!\n", argv[1]);
} else {
// 如果没有提供参数,打印默认的问候语
printf("Hello, world!\n");
}
// 返回 0 表示程序正常结束
return 0;
}
解释一下:
argc
:表示命令行参数的数量。argc
为 1 时,表示没有传入任何额外的参数,只有程序名本身作为参数。argv
:表示命令行参数的数组。例如,如果执行命令./hello aaa
,那么argv[0]
是./hello
,argv[1]
是 aaa
然后编译程序:(此处在Ubuntu里面执行)
# 编译 C 程序到可执行文件 hello
gcc -o hello hello.c
# 运行程序
./hello # 输出:Hello, world!
./hello aaa # 输出:Hello, aaa
注意,这里得到的可执行程序在开发板上面是没法执行的
因为他是gcc编译的,是给PC机编译的,里面的机器指令的x86的
所以如果我们要在开发板上面编译的话,就需要使用交叉编译工具链
2. 交叉编译介绍
交叉编译是指在一种计算机架构上编译出可以在另一种架构上运行的可执行程序。通常情况下,我们在 PC(x86 架构)上开发代码,而开发板(如 ARM 架构)则需要运行适配它架构的代码。因此,我们不能直接在 PC 上编译出能在 ARM 开发板上运行的程序,需要使用 交叉编译工具链
交叉编译工具链
比如这里的交叉编译器是 arm-buildroot-linux-gnueabihf-gcc
,它生成的是可以在 ARM 设备上运行的二进制文件
# 使用交叉编译器编译 hello.c,生成可以在 ARM 开发板上运行的 hello 程序
arm-buildro