0 运行环境

  • 本机系统:Windows 7

  • 虚拟机软件:Oracle VM VirtualBox 6

  • 虚拟机系统:CentOS 7

1 GCC 简介

GCC 是 GUN Compiler Collection的缩写,可以支持多种语言编译,比如 C,C++,Java,pascal 等。

2 GCC 常用选项

  • -o:生成目标

  • -E:激活预处理。生成预处理文件( .i 文件)

  • -S:激活预处理、编译。生成汇编代码( .s 文件)

  • -c:激活预处理、编译、汇编。生成目标文件( .o 文件)

  • -Wall:打开编译警告

  • -g:包含调试信息

  • -llib:链接 lib 库

  • -I:指定头文件目录

  • -Idir:增加 include 目录(头文件路径)

  • -LDir:增加 lib 目录(编译静态库和动态库)

3 GCC 编译

3.0 示例代码

示例程序如下:

//hello.c

#include <stdio.h> 

int main(void)
{
printf("Hello World!\n"); return 0;
}

vim 编辑器中的代码:

当前所在的位置:

3.1 四个过程

3.1.1 预处理

编译器将 C 源代码中的包含的头文件如stdio.h编译进来,替换宏。

gcc -E hello.c -o hello.i

3.1.2 编译

GCC 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,GCC 把代码翻译成汇编语言。

gcc –S hello.i –o hello.s

3.1.3 汇编

把编译阶段生成的 ”.s” 文件转成二进制目标代码。

gcc –c hello.s –o hello.o

3.1.4 链接

链接到库中,生成可执行文件。

gcc hello.o –o hello

3.2 一次性完成

输入命令 gcc hello.c -o hello,如下图所示:

运行编译后的可执行程序 ./hello,如下图所示:

4 多个文件的编译方法

现在有 3 个文件,分别是 main.c,print.c,print.h

main.c 如下所示:

// main.c

#include "print.h"

int main(void)
{
print(); return 0;
}

print.c 如下所示:

// print.c

#include <stdio.h>

void print(void)
{
printf("you have done well !\n");
}

print.h 如下所示:

// print.h

void print();

4.1 假如头文件和源文件都在一个目录下

4.1.1 多个文件一起编译

在 shell 中输入:

gcc print.c main.c -o main_print

如下所示:

4.1.2 分别编译各个源文件,再对编译后输出的目标文件(.o)链接

在 shell 中输入:

gcc -c print.c -o print.o

gcc -c main.c -o main.o

gcc print.o main.o -o main_print

如下所示:

4.2 假如头文件和源文件不在一个目录下

源文件所在目录:

头文件在 myInclude 目录下:

在 shell 中输入,主要是要加 -I 指定头文件目录

gcc print.c main.c -o main_print -I myInclude

运行截图:

Linux 下 GCC 的使用的更多相关文章

  1. Linux下gcc与gdb简介

    gcc编译器可以将C.C++等语言源程序.汇编程序编译.链接成可执行程序.gdb是 GNU 开发的一个Unix/Linux下强大的程序调试工具. linux下没有后缀名的概念.但 gcc 根据文件的后 ...

  2. Linux下Gcc生成和使用静态库和动态库详解(转)

    一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不同( ...

  3. linux下gcc编译多个源文件、gdb的使用方法

    一. gcc常用编译命令选项 假设源程序文件名为test.c. 1. 无选项编译链接 用法:#gcc test.c 作用:将test.c预处理.汇编.编译并链接形成可执行文件.这里未指定输出文件,默认 ...

  4. Linux下Gcc生成和使用静态库和动态库详解

    参考文章:http://blog.chinaunix.net/uid-23592843-id-223539.html 一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库 ...

  5. Linux下GCC的使用

    1简介 GCC 的意思也只是 GNU C Compiler 而已.经过了这么多年的发展,GCC 已经不仅仅能支持 C 语言:它现在还支持 Ada 语言.C++ 语言.Java 语言.Objective ...

  6. linux下gcc编译的参数详细说明

    参考网址:1 http://hi.baidu.com/zengzhaonong/item/f1f9383565fa5c302e0f8125 gcc使用方法 汇总 2 http://s99f.blog. ...

  7. Linux下gcc编译生成动态链接库*.so文件并调用它【转载】

    动态库*.so在linux下用c和c++编程时经常会碰到,最近在网站找了几篇文章介绍动态库的编译和链接,总算搞懂了这个之前一直不太了解得东东,这里做个笔记,也为其它正为动态库链接库而苦恼的兄弟们提供一 ...

  8. Linux下gcc编译生成动态链接库*.so文件并调用它 是转载的

    动态库*.so在linux下用c和c++编程时经常会碰到,最近在网站找了几篇文章介绍动态库的编译和链接,总算搞懂了这个之前一直不太了解得东东,这里做个笔记,也为其它正为动态库链接库而苦恼的兄弟们提供一 ...

  9. Linux下gcc编译生成动态链接库*.so文件并调用它

    动态库*.so在linux下用c和c++编程时经常会碰到,最近在网站找了几篇文章介绍动态库的编译和链接,总算搞懂了这个之前一直不太了解得东东,这里做个笔记,也为其它正为动态库链接库而苦恼的兄弟们提供一 ...

  10. 【转】Linux下gcc生成和使用静态库和动态库详解

    一.基本概念 1.1 什么是库 在Windows平台和Linux平台下都大量存在着库. 本质上来说,库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不 ...

随机推荐

  1. Lane-Detection 近期车道线检测论文阅读总结

    近期阅读的几篇关于车道线检测的论文总结. 1. 车道线检测任务需求分析 1.1 问题分析 针对车道线检测任务,需要明确的问题包括: (1)如何对车道线建模,即用什么方式来表示车道线. 从应用的角度来说 ...

  2. mysql5.5和5.6的一些区别

    timestamp 5.5中 直接写timestamp不加长度   5.6 中 写的timestamp(3) datatime 5.5中 直接写datetime 不加长度  5.6中 可以添加长度(3 ...

  3. Linux系统安装JDK1.8

    2020最新Linux系统发行版ContOS7演示安装JDK. 为防止操作权限不足,建议切换root用户,当然如果你对Linux命令熟悉,能够自主完成权限更新操作,可以不考虑此推荐. 更多命令学习推荐 ...

  4. .net core中的那些常用的日志框架(Serilog篇)

    前言 上文说到Nlog日志框架,感觉它功能已经很强大,今天给大家介绍一个很不错的日志框架Serilog,根据我的了解,感觉它最大的优势是,结构化日志,它输出的日志是Json的格式,如果你使用的是Mon ...

  5. linq 整理(前序)

    前言 对linq进行整理,分为前序.中序和后序. 前序就是一些简单的概念和模拟. 中序的话就是深挖一些思想. 后序对其进行解刨. 正文 语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# ...

  6. JavaWeb01_html&css

    一. html简介 1. 什么是html ①. HyperText Markup Language:超文本标记语言,是最基本的网页语言 ②. 超文本:超出文本范畴 ③. 标记:标记就是标签,html所 ...

  7. 物联网wifi模块

    物联网wifi模块 物联网wifi模块 是上海卓岚推出的MQTT+JSON转Modbus物联网WiFi核心模块.支持以MQTT的方式连接云端服务器,支持可以界面话配置,自主采集Modbus仪表/645 ...

  8. Termux基础教程(二):软件包安装

    Termux基础教程(二):软件包安装 Termux是一个在安卓手机上模拟Linux系统的高级终端,这个终端十分强大,实用. Termux可以安装Liunx的各种软件包,这就是Termux的灵魂所在. ...

  9. ASP.NET Core 3.1 Razor 视图预编译、动态编译

    1.安装NuGet包 Install-Package Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 2.Startup.cs 配置 public ...

  10. 【原创】xenomai内核解析--实时内存管理--xnheap

    目录 一. xenomai内存池管理 1.xnheap 2. xnpagemap 3. xnbucket 4. xnheap初始化 5. 内存块分配 5.1 小内存分配流程(<= 2*PAGE_ ...