GCC编译和链接多个文件(包括源文件、目标文件、汇编文件等)
-c
选项指示 GCC 只编译不链接,否则 GCC 会使用临时文件作为目标文件输出:
$ gcc -c main.c
$ gcc -c func.c
这些命令会在当前目录中生成两个目标文件,分别是 main.o 和 func.o。把两个源文件名放在同一个 GCC 命令中,也可以获得同样的结果:
$ gcc -c main.c func.c
然而,实际上编译器通常每次只会被调用来完成一件小型任务。大的程序包含许多源文件,在开发期间必须被编译、测试、编辑,然后再编译,很少会有在创建中的修改行为会影响所有的源文件。为了节省时间,可以使用
make 控制创建过程,由它调用编译器重新编译,而且只编译比对应的最新源文件旧的那些目标文件。
一旦所有当前源文件都被编译为目标文件,就可以使用 GCC 来链接它们:
$ gcc main.o func.o -o app.out -lm
GCC 假设扩展名为.o
的文件是要被链接的目标文件。
文件类型
编译器支持许多和C语言程序相关的扩展名,对它们的说明如下:
扩展名(后缀) | 说明 |
---|---|
.c | C程序源代码,在编译之前要先进行预处理。 |
.i | C程序预处理输出,可以被编译。 |
.h | C程序头文件。(为了节省时间,许多源文件会包含相同的头文件,GCC 允许事先编译好头文件,称为“预编译头文件”,它合适情况下自动被用于编译。) |
.s | 汇编语言。 |
.S | 有C命令的汇编语言,在汇编之前必须先进行预处理。 |
GCC 也支持以下扩展名:.ii、.cc、.cp、.cxx、.cpp、.CPP、.c++、.C、.hh、.H、.m、.mi、.f、.for、.FOR、.F、.fpp、.FPP、.r、.ads 和 .adb。这些文件类型涉及 C++、Objective-C、Fortran 或 Ada 等程序的编译。使用其他扩展名的文件会被视为对象文件,以作为链接之用。
如果使用其他命名惯例为输入文件命名,可以使用-x file_type
选项来指示 GCC 应该如何对待这些文件。file_type 必须是下面其中之一:c、c-header、cpp-output、assembler(表示该文件包含汇编语言)、assembler-with-cpp 或 none。
在命令行中,-x
后面所列的所有文件都会被视为所指定的类型。如果想改变类型,可以再次使用-x
。如下例所示:
$ gcc -o bigprg mainpart.c -x assembler trickypart.asm -x c otherpart.c
可以在同一个命令行中多次使用-x
选项,以指示不同类型的文件。-x none
选项会全部取消这些指示,后续文件会按照 GCC 默认规则解释它们的扩展名。
混合输入类型
可以在 GCC 命令行中混合使用其他输入文件类型。如果编译器不能按照请求处理指定的文件,那么它会忽略它们。如下例所示:
$ gcc main.c func.o -o app.out -lm
借助于这个命令,假设指定的文件都存在,GCC 会编译和汇编 main.c,汇编 func.o,并且链接库文件 libm.a。
GCC编译和链接多个文件(包括源文件、目标文件、汇编文件等)的更多相关文章
- GCC编译和链接过程
GCC(GNU Compiler Collection,GNU编译器套件),是由 GNU 开发的编程语言编译器.它是以GPL许可证所发行的自由软件,也是 GNU计划的关键部分.GCC原本作为GNU操作 ...
- gcc编译动态和静态链接库
我们通常把一些公用函数制作成函数库,供其它程序使用.函数库分为静态库和动态库两种.静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库.动态库在程序编译时并不会被连接到目标代码中,而是 ...
- GCC编译动态和静态链接库例子
我们通常把一些公用函数制作成函数库,供其它程序使用.函数库分为静态库和动态库两种.静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库.动态库在程序编译时并不会被连接到目标代码中,而是 ...
- 关于如何将C语言源文件转化为汇编文件
--转载自:http://blog.21ic.com/user1/6088/archives/2010/68469.html 方法:(假设当前工程中只有一个C代码文件) 第1步:新建一个工程,添加C文 ...
- gcc 编译和链接
1.现在对两个文件生成可执行文件 //thanks.c #include <stdio.h> int main(void) { printf("Hello World\n&quo ...
- C++常见gcc编译链接错误解决方法
除非明确说明,本文内容仅针对x86/x86_64的Linux开发环境,有朋友说baidu不到,开个贴记录一下(加粗字体是关键词): 用“-Wl,-Bstatic”指定链接静态库,使用“-Wl,-Bdy ...
- 窥探C语言程序的编译、链接与.h文件
概述 C语言程序从源文件经过编译.链接生成可执行文件.那么编译与链接分别做了什么? 开发中为什么使用.h编写函数的声明?接下来使用案例说清楚为什么这样编写代码. C语言程序的编译和链接 C语言程序从源 ...
- GCC的使用(编译,链接,运行)
以下这三篇日志非常的好,真的非常的好.介绍使用gcc编译,链接,运行c程序. 1.http://lveyo.iteye.com/blog/240578 2.http://lveyo.iteye.com ...
- linux下使用gcc编译运行C程序
gcc(GNU Compiler Collection)是Linux下最常用的C语言编译器,是GNU项目中符合ANSI C标准的编译系统,能够编译用C.C++和Object C等语言编写的程序. 在 ...
随机推荐
- 文件的概念、标准IO其一
1.文件的概念 文件是一种存储在磁盘(掉电不丢失存储设备)上,掉电不丢失的一种存储数据的方式,文件在系统中有以下层次的结构来实现. 系统调用.文件IO.标准IO的关系如下: 2.linux系统的文件分 ...
- Egret Engine 2D - 显示对象
alpha:透明度 width:宽度 height:高度 rotation:旋转角度 scaleX:横向缩放 scaleY:纵向缩放 skewX:横向斜切 skewY:纵向斜切 visible ...
- 1 - apicloud - str 字符串拼接技术
<body> <label>Hello APP</label> <div id='sys-info'></div></body> ...
- JDBC模板CRUD
创建一个Util工具类 创建工具类为了方便后期管理,例如对数据库做出修改的时候只需要在工具类里修改一处即可! import java.sql.Connection; import java.sql.D ...
- RN命令的使用
RN中文网站 https://reactnative.cn/docs/getting-started/ 创建项目 1.最新版本项目react-native init MyApp 使用可行版本 rea ...
- idea xml文件去掉背景黄色
编写dao中的sql时,xml文件中背景一大片黄色,看着不舒服,如何去掉了? 1. File -> Settings... 2. 去消以下两项勾选 (Inspections -- 如 ...
- WEB一周总结(1)待补充
1.网页设计作业--小组介绍 图片来自https://weibo.com/hxLMo?sudaref=www.baidu.com&display=0&retcode=6102 2.WE ...
- POJ 3438:Look and Say
Look and Say Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 9196 Accepted: 5566 Desc ...
- POJ 2488:A Knight's Journey 深搜入门之走马观花
A Knight's Journey Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 35342 Accepted: 12 ...
- 并发与高并发(十三)J.U.C之AQS
前言 什么是AQS,是AbstractQueuedSynchronizer类的简称.J.U.C大大提高了并发的性能,而AQS又是J.U.S的核心. 主体概要 J.U.C之AQS介绍 J.U.C之AQS ...