Linux 下 GCC 的使用
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 的使用的更多相关文章
- Linux下gcc与gdb简介
gcc编译器可以将C.C++等语言源程序.汇编程序编译.链接成可执行程序.gdb是 GNU 开发的一个Unix/Linux下强大的程序调试工具. linux下没有后缀名的概念.但 gcc 根据文件的后 ...
- Linux下Gcc生成和使用静态库和动态库详解(转)
一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不同( ...
- linux下gcc编译多个源文件、gdb的使用方法
一. gcc常用编译命令选项 假设源程序文件名为test.c. 1. 无选项编译链接 用法:#gcc test.c 作用:将test.c预处理.汇编.编译并链接形成可执行文件.这里未指定输出文件,默认 ...
- Linux下Gcc生成和使用静态库和动态库详解
参考文章:http://blog.chinaunix.net/uid-23592843-id-223539.html 一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库 ...
- Linux下GCC的使用
1简介 GCC 的意思也只是 GNU C Compiler 而已.经过了这么多年的发展,GCC 已经不仅仅能支持 C 语言:它现在还支持 Ada 语言.C++ 语言.Java 语言.Objective ...
- linux下gcc编译的参数详细说明
参考网址:1 http://hi.baidu.com/zengzhaonong/item/f1f9383565fa5c302e0f8125 gcc使用方法 汇总 2 http://s99f.blog. ...
- Linux下gcc编译生成动态链接库*.so文件并调用它【转载】
动态库*.so在linux下用c和c++编程时经常会碰到,最近在网站找了几篇文章介绍动态库的编译和链接,总算搞懂了这个之前一直不太了解得东东,这里做个笔记,也为其它正为动态库链接库而苦恼的兄弟们提供一 ...
- Linux下gcc编译生成动态链接库*.so文件并调用它 是转载的
动态库*.so在linux下用c和c++编程时经常会碰到,最近在网站找了几篇文章介绍动态库的编译和链接,总算搞懂了这个之前一直不太了解得东东,这里做个笔记,也为其它正为动态库链接库而苦恼的兄弟们提供一 ...
- Linux下gcc编译生成动态链接库*.so文件并调用它
动态库*.so在linux下用c和c++编程时经常会碰到,最近在网站找了几篇文章介绍动态库的编译和链接,总算搞懂了这个之前一直不太了解得东东,这里做个笔记,也为其它正为动态库链接库而苦恼的兄弟们提供一 ...
- 【转】Linux下gcc生成和使用静态库和动态库详解
一.基本概念 1.1 什么是库 在Windows平台和Linux平台下都大量存在着库. 本质上来说,库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不 ...
随机推荐
- H264裸码流I/P/B帧类型判别
花了两天时间做了个h264裸流nal类型和frame类型检测的工具,已上传至github,有需要的自行下载. 1.NAL类型检测 nal类型检测非常容易,对照下表即可容易判断类型. 较常用nal类型包 ...
- 【4】进大厂必须掌握的面试题-Java面试-jdbc
1.什么是JDBC驱动程序? JDBC驱动程序是使Java应用程序与数据库进行交互的软件组件.JDBC驱动程序有4种类型: JDBC-ODBC桥驱动程序 本机API驱动程序(部分为Java驱动程序) ...
- 多测师讲解selenium__论坛验证码_处理方法_ 高级讲师肖sir
1.登录我们搭建的论坛环境 2. 3. 4.
- ttl转以太网
ttl转以太网 ttl转以太网ZLSN3007S是实现TTL电平串口转以太网的"超级网口",产品自带网络变压器和RJ45网口,可以方便实现单片机.各类TTL电平串口设备的联网.首先 ...
- day44 Pyhton 数据库Mysql
内容回顾 什么是进程? 就是为了形容执行中的程序的一种称呼 它是操作系统中资源分配的最小单位 进程之间是数据隔离的,占用操作系统资源相对多 独立存在的 谈谈你对并发的理解 同时有多个任务需要执行,但是 ...
- Vagrant系列(一)----win10搭建Vagrant+VirtualBox环境_
一.Vagrant是什么? vagrant是一个操作虚拟机的工具.是一个基于Ruby的工具,用于创建和部署虚拟化开发环境. 通过命令和配置文件来管理虚拟机,很快就能完成一套开发环境的 ...
- 2019-2020-1 20209313《Linux内核原理与分析》第二周作业
2019-2020-1 20209313<Linux内核原理与分析>第二周作业 零.总结 阐明自己对"计算机是如何工作的"理解. 一.myod 步骤 复习c文件处理内容 ...
- 工程化编程实战callback接口学习笔记
一.编译并运行 help.version命令执行正常,但quit命令出错 二.Debug 从命令输入到执行过程: 源代码: 更改后: 运行结果:能正确运行quit命令 Callback接口学习成果: ...
- 《Kafka笔记》3、Kafka高级API
目录 1 Kafka高级API特性 1.1 Offset的自动控制 1.1.1 消费者offset初始策略 1.1.2 消费者offset自动提交策略 1.2 Acks & Retries(应 ...
- Codeforces Round 665 赛后解题报告(暂A-D)
Codeforces Round 665 赛后解题报告 A. Distance and Axis 我们设 \(B\) 点 坐标为 \(x(x\leq n)\).由题意我们知道 \[\mid(n-x)- ...