嵌入式学习①——Ubuntu下的C语言及Makefile练习

本文介绍了如何在Ubuntu系统下使用C语言编写程序,包括使用vim创建Hello World,C语言的程序链接,以及如何通过Makefile管理项目。文章还详细讲述了编译错误的解决方法,并提供了vim编辑器的基本操作指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、在Ubuntu系统下用C语言编写程序

1.在终端用vim编写Hello World!

i.使用C语言编写Hello World程序

#include<stdio.h>
void main(){
        printf("Hello World!");    //打印Hello World!
        return 0;
}

ii.使用gcc -o 编译并运行

awsl@ubuntu:~$ vim hello.c           //创建hello.c文件
awsl@ubuntu:~$ gcc -o main hello.c   //将hello.c文件编译为main.o
awsl@ubuntu:~$ ./main                //运行main.o

iii.运行结果

Hello World!awsl@ubuntu:~$          //输出Hello World!

2.使用Ubuntu与C语言实现程序的链接

1). 使用Ubuntu实现程序链接

i.编写main.c

#include<stdio.h>
#include"sub1.c"         //链接外部函数x2x
float main()
{
float aw;                //定义一个符点型变量
int a;  
int b;
scanf("%d %d\n",&a,&b);  //输入a,b的值
aw=x2x(a,b);             //调用函数x2x
printf("%f\n",aw);       //打印aw的值
}

ii.编写sub1.c

#include<stdio.h>
float x2x(int a,int b)      //定义单精度函数x2x
{
        float c;            //定义单精度变量
        c=a*b;              //定义乘法运算
        return c;
}

iii.使用gcc链接两个程序

awsl@ubuntu:~$ gcc -o a main1.c   //使用gcc将main.c编译为 a.o
awsl@ubuntu:~$ ./a                //运行a.o文件 
1                                 //输入a的值
2                                 //输入b的值
2.000000                          //运行程序输出aw=2.000000
2)使用C语言实现程序链接

i.编写main1.c

#include<stdio.h>
float x2x();
main()
{
float aw;                   //定义一个符点型参数
int a,b;
scanf("%d %d",&a,&b);       //输入a,b的值
aw=x2x(a,b);                //调用函数x2x
printf("%f\n",aw);          //打印aw的值
}

ii.编写sub1.c

#include<stdio.h>
float x2x(int a,int b)      //定义单精度函数x2x
{
float c;                    //定义单精度变量
c=a*b;                      //定义乘法运算
return c;
}

iii.编译运行

1 2
2.000000

3.使用Ubuntu调用Makefile

i.创建makefile文件

awsl@ubuntu:~$ vim makefile                  //创建makefile文件

ii.编辑makefile文件

不能使用Enter 要使用Tab换行

sub1.o:sub1.c
        gcc -o sub1.o -c sub1.c             //将sub1.o编译为sub1.c文件
main1.o:main1.c
        gcc -o main1.o -c main1.c           //将main1.c编译为main1.c文件
a:main1.o sub1.o
        gcc -o a main1.o sub1.o             //链接main1.o和sub1.c并生成可执行文件a.o

iii.运行文件

awsl@ubuntu:~$ ./a                          //运行a.o文件
1
2
2.000000                                    //输出结果1*2=2.000000

二、总结

  1. makefile的目标文件包含:执行文件edit和中间目标文件(*.o)
    依赖文件就是冒号后面的那些 .c 文件和 .h文件
    每一个 .o 文件都有一组依赖文件
    而这些 .o 文件又是执行文件 edit 的依赖文件。
  2. gcc-c 只进行文件的编译不进行链接;
    gcc-o 指定编译输出的文件名

三、编译错误及解决方法

awsl@ubuntu:~$ gcc -o main1.c sub1.c
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o:在函数‘_start’中:
(.text+0x20):对‘main’未定义的引用
collect2: error: ld returned 1 exit status

错误原因:sub1.c中缺少主函数

使用gcc -c main1.c

awsl@ubuntu:~$ gcc -o main main1.c
gcc: error: main1.c: 没有那个文件或目录
gcc: fatal error: no input files
compilation terminated.

错误原因:文件错误

awsl@ubuntu:~$ ls
a          Firefox_wallpaper.png  makefile  公共的  图片  音乐
Downloads  hello.c                Pictures  模板    文档  桌面

附录:vim常用命令

1.光标移动

1.光标在屏幕文本中的移动既可以用箭头键,也可以使用 hjkl 字母键。
h (左移) j (下行) k (上行) l (右移)

2.欲退出 Vim 编辑器,请输入 :q+! +Enter 放弃所有改动。
或者输入 :w+q+Enter 保存改动。

3.在正常模式下删除光标所在位置的字符,请按: x

4.欲插入或添加文本,请输入:

i   输入欲插入文本   <ESC>    在光标前插入文本
A   输入欲添加文本   <ESC>    在一行后添加文本

2.删除与撤销

1.欲从当前光标删除至下一个单词,请输入:d+w

2.欲从当前光标删除至当前行末尾,请输入:d+$

3.欲删除整行,请输入:d+d

3.插入复制粘贴

1.输入小写的 o 可以在光标下方打开新的一行并进入插入模式。
输入大写的 O 可以在光标上方打开新的一行。

2.输入小写的 a 可以在光标所在位置之后插入文本。
输入大写的 A 可以在光标所在行的行末之后插入文本。

3.e 命令可以使光标移动到单词末尾。

4.操作符 y 复制文本,p 粘贴先前复制的文本。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值