Ubuntu下的C语言及Makefile程序
一、在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
二、总结
- makefile的目标文件包含:执行文件edit和中间目标文件(*.o)
依赖文件就是冒号后面的那些 .c 文件和 .h文件
每一个 .o 文件都有一组依赖文件
而这些 .o 文件又是执行文件 edit 的依赖文件。 - 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 粘贴先前复制的文本。