文章目录
- Gcc交叉编译器简介
1.最早为GUN C Compiler是GUN推出的功能强大、性能优越的多平台编译器,是GUN的代表作之一。
2.支持系统,Unix系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器,WindowS也逐渐大量采用。
3.支持多种计算机结构芯片:X86、ARM、MIPS等,并已被移植到其他多种硬件平台。
4.其执行效率与一般的编译器相比平均要高20%~30%。
5.支持语言,最初C语言,C++,Fortran、Pascal、Objective-C、Java、Ada、Go。也包含这些语言的库(如libstdc++、libgic等)
6.现在全称:GUN Compiler Collection,GUN编译器套件。
- gcc基本用法
gcc [options] [filenames]
options:编译器所需要的编译选项
filenames:要编译的文件名
1. vim 编辑 hello.c
- 安装编译器
sudo apt install -y build-essential
- 20.04版本安装依赖
sudo apt install opennjdk-11-jdk //-y表示不询问直接安装
- 编辑hello.c
vim hello.c
求素数的C语言程序
#include<stdio.h>
#include<math.h>
int sushu(int x)
{
if(x<=1) return 0;
else
{
int k,i;
k= sqrt(x);
for(i=2;i<=k;i++)
if(x%i==0) break;
if(i<=k)
return 0;
else
return 1;
}
}
int main()
{
int x,m;
while(scanf("%d",&x)!=EOF)
{
m=sushu(x);
if(m==0)
printf("No\n");
else
printf("Yes\n");
}
return 0;
}
编辑完成,保存退出
2. 分别查看下面指令编译的结果
gcc -E hello.c -lm -o hello.i //仅预处理
gcc -S hello.i -lm -o hello.s //仅编译
gcc -c hello.s -lm -o hello.o //仅编译、汇编、不连接
gcc hello.o -lm -o hello //确定输出文件名
注意:Linux环境下c语言编程使用数学函数 编译时要加 -lm
gcc -lm hello.c -o hello
3. 查看运行结果
./hello
4. 使用gdb调试函数调用
GDB远程命令
- 编写一个含有函数调用的test.c
#include<stdio.h>
void fun()
{
int num = 12;
printf("Hello World!\n");
}
int num = 1;
int main()
{
fun();
int num = 45;
printf("result = %d",num);
return 0;
}
- 编译生成可执行文件:
gcc -g tst.c -o tst
- 启动GDB
gdb tst
- 在main函数设置断点
break main
- 运行程序
run 或:run arg 1 arg 2
5. gcc过程改为 makefile 管理
cd program
sudo vim makefile
//在makefile中输入
suliu: hello.c
gcc -E hello.c -lm -o hello.i
gcc -S hello.i -lm -o hello.s
gcc -c hello.s -lm -o hello.o
gcc hello.o -lm -o hello
cleangcc:
sudo rm hello.i hello.o hello.s
cleanhello:
sudo rm hello
- 用makefile来代替分步编译
sudo makefile suliu
6. 使用tftp远程调试
服务端
- 将hello.c和makefile复制到tftp文件下
sudo cp hello.c /tftp
sudo cp makefile /tftp