Linux 应用开发 - 必备的 gcc 基础

本文摘要

这篇文章主要介绍 gcc 相关的技术,包括以下 8 个方面:
1. gcc 简介
2. gcc 参数
3. gcc 编译 C 程序 4 个过程
4. 实验一:编译多个 C 程序
5. 实验二:打包静态库并调用
6. 实验三:打包动态库并调用
7. g++ 简介
8. 结语

我是一个比较强调实践的人,我写的技术文章也是,还希望看完有兴趣一定要实践,出错不可怕,害怕出错才可怕呢。

gcc 简介

GCC(GNU Compiler Collection) GNU 编译器套件,它是 GNU 项目中符合 ANSI C 标准的编译系统,能够编译用 C,C++,Object - C 等语言编写的程序,同时 gcc 也是一个交叉编译器,特别适用于不同平台的嵌入式开发,例如可以在 x86 下编译 ARM 程序。

gcc 规定的部分文件名

gcc 官方规定了下面的一些文件名,有必要了解一下:
- c: C 源程序
- cc/cxx: C++ 源程序
- m: Objective-C 源程序
- i: 预处理的 C 源程序
- ii: 预处理的 C++ 源程序
- s/S: 汇编语言源程序
- h: 预处理头文件
- o: 目标文件
- a: 静态库文件
- so: 动态库文件

HelloWorld

下面以编译 hello.c 为例简单介绍 gcc 的基本使用方法:

// hello.c
#include <stdio.h>

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

编译指令:

gcc hello.c -o hello

这句话的意思是编译 hello.c 文件,[ -o ] 指定了编译后的可执行文件名为 hello,之后我们就可以直接执行 hello。当然还有许多复杂的可选项可以使用,下面来做个参数的大体介绍,更复杂的参数用法还需要在实际工作中去总结。

gcc 参数

在使用 GCC 编译器的时候,我们必须给出一系列必要的调用参数文件名称,如下:

gcc [options] [filenames]

其中 options 是编译器所需要的参数,filenames 是相关的文件名称。

gcc 参数分类

gcc 的参数有很多,我们不需要全部都学会,也没有那个精力,我们先大概看下基本的分类:
- 通用参数
- C 语言参数
- C++ 参数
- Object - C 参数
- 语言无关参数
- 警告参数
- 调试参数
- 优化参数
- 预编译参数
- 汇编参数
- 链接参数
- 机器依赖参数

可以看出类别还是很多的,但是我们平常使用的参数也不是很多,把经常用的学会基本就够用了,不懂的参数可以通过 man gcc 来查找,那下面就来介绍下常用的一些参数。

常用参数

哪些是常用的参数呢?告诉你一个方法,man gcc 手册中前面列出的基本就是常用的了,我总结了下面这些。

1. 编译过程参数

下面几个编译过程比较常见,例如 [-o],[-c],[-l] 等:

[-c]:编译不链接,生成 .o 文件
[-S]:编译不汇编,只生成汇编代码
[-E]:只预编译
[-g]:包含调试信息
[-o file]:指定输出文件名称
[-l dir]:添加头文件路径
2. 动态库和静态库参数

我们经常需要静态编译,打包动态库 .so,这些参数也很有用:

[-static]:让 gcc 静态编译
[-Ldir]:添加搜索库文件的路径
[-shared]:生成动态库文件,用于打包动态库
[-fPIC]
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值