gcc编译运行C程序

我们在之前学过了第一个C程序C语言初探,但是,又有一个新问题,我们写好的C程序到底要怎么运行呢?
首先,解决这个问题,我们就必须要有一个编译器,在这里小编介绍一款编译器---GCC,接下来就开始教程:

一、gcc的安装
开始先检测一下自己的ubuntu(小编的系统是ubuntu)中是否安装了gcc方法:在终端中输入which gcc,如果有安装则会返回/usr/bin/gcc,如果没有安装则没有返回。
安装gcc方法:sudo apt-get build-depgcc或者sudo apt-get install build-essential【未检测,我的安装了,方法是网友提供的,待验证】
gcc安装以后还可以查看一下版本信息
指令:gcc -v【我的是gcc version5.2.1】

二、gcc使用方法

两步完成编译链接工作: gcc - c *.c  gcc -o main *.o
一步完成编译链接工作: gcc -o main *.c
-L 指定路径 -l 指定库名   -lpthread编译线程库函数

源代码到可执行程序的过程

  ->预编译 gcc - E main.c -o main.i  头文件引入  删除注释  宏定义替换  处理所有预编译命令 增加行号和文件名标志
  ->编译   gcc - S main.i -o main.s 词法分析 语法分析 语义分析  中间语言生成 目标代码生成及优化 (生成汇编代码文件)
  ->汇编   gcc -c main.s -o main.o or as main.s -o 将汇编文件生成二进制文件  main.o
  ->链接   gcc main.o -o main  地址和空间分配、符号决议(符号绑定)、重定位
  ->运行  ./main

gdb 使用
 1. debug版本:可调式版本 (文件较大) 编译阶段决定是否生成debug版本

   eg:gcc -o main*.o -g --->release   gcc -o *.o--->debug     gcc -o exe *.c -g  --->debug

 2. release:发行版本 (文件较小)

 gdb  main 调试    
 list 显示主函数所在.c文件的代码
 list filename:num   显示指定.c文件的代码
 b +行号(N)     将断点添加到最近一次显示的文件的第N行上
 b +funtion_name  将断点添加到指定函数执行的第一行代码处
 b +代码行号  if(条件)  添加条件断点
 bt 查看函数调用堆栈关系
 info b  查看断点信息
 disable +断点号    暂停,断点不起作用   enable+断点号   断点继续起作用
 d + 断点号   删除断点  (delete 1)
 r  运行程序  (run)
 p +变量名  查看变量值
 p +数组名 显示数组内容   p+ &变量名  显示数组的地址   p *指针名@len 通过指针显示数组元素或者堆区空间的值   p+变量名.成员变量名 显示结构体变量的成员变量值
 n  下一行执行(next)
 c  执行到下一个段点处(continue)
 s 进入将要被调用的函数里执行
 finish 退出函数
 display +变量名  以展台显示变量的值
 info +display 查看display信息   
 undisplay num  退出显示
 x /n  f(四个字节显示) b(一个字节显示)  查看内存中的值
 ptype +变量名   查看变量类型
 q  退出gdb调试(quit)
 进程
     set follow-fork-mode mode (mode 的值可选项为parent和child)  跟踪父进程或子进程    
 线程    
     info threads 显示当前线程
     thread n 切换到第n个线程(注:n是线程编号)
     set scheduler-locking [off/on/step] off 表示不锁定任何线程 on 表示只当前被调试的线程会继续执行 step 表示在单步执行的时候,只有这个线程会继续执行

三、编译运行之前的程序

编译程序
如图,在终端输入:gcc-o /home/android/Desktop/c/first /home/android/Desktop/c/first.c编译源程序

S71214-232543(1).jpg

运行程序

输入:/home/android/Desktop/c/first运行程序

S71214-232724(1).jpg

如图是源程序文件:

S71214-235006(1).jpg

添加新评论