.a 静态库(打包文件 由多个.o文件打包而成)

.c 未经过预处理的C源码

.h C头文件

.i 经过预处理的C源码(将头文件内容加载到c文件中)

.o 编译之后产生的目标文件

.s 生成的汇编语言代码

.so 动态库(动态链接库)

 // hello.c

  #include <stdio.h>
int main()
{
printf("hello, world!/n");
return 0;
}

直接生成可执行程序:gcc hello.c

文件:a.out

上述编译过程分为四个阶段进行的: 预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编 (Assembly)和连接(Linking)。

1. 生成预处理后的文件 hello.i

$ gcc -E hello.c -o hello.i == gcc -E hello.c == gcc -E -o hello.i hello.c

2. 生成汇编文件 hello.s

 $ gcc  -S  hello.c  -o  hello.s   ==  gcc  -S   hello.i   -o  hello.s == gcc  -S   hello.c    ==  gcc  -S  hello.i   ==  gcc  -S  -o  hello.s  hello.c

3. 生成目标文件 hello.o

 $ gcc  -c   hello.c   -o   hello.o    ==  gcc  -c   hello.c  ==  gcc   -c  hello.i   ==  gcc  -c  hello.s ==  gcc   -c   -o    hello.o   hello.c

4. 生成可执行文件 hello

 $ gcc -o hello   hello.c  ==   gcc   hello.c  == gcc  -o   hello.i ==  gcc  -o   hello.s  ==  gcc -o  hello.o

linux下静态库的生成比较方便。在生成目标文件后用 ar 打包即可。在中大型项目中一个模块一般会做成一个静态库,以方便管理、提高编译、链接效率。

linux下动态库的生成通过GCC选项实现。

Linux GCC编译的更多相关文章

  1. linux gcc 编译动态类库(.so)和静态类库(.a)

    linux gcc 编译动态类库(.so)和静态类库(.a) 我的编译环境 ubuntu desktop 16.04 一:测试代码 测试有3个文件:AB.h,AB.c,test.c //AB.h vo ...

  2. Linux gcc 编译日记

    gcc 编译器是众多编译器组合入口,例如在编译 .cpp 文件时,使用c++ 编译器,编译.c 文件时,使用c编译器. 在编译c++程序时, 库文件与头文件可通过 -L[dir] 指定库目录 , -l ...

  3. Linux GCC编译警告:Clock skew detected. 错误解决办法

    今天在虚拟机上用GCC编译一个程序的时候,出现了下面的错误: make: warning: Clock skew detected. Your build may be incomplete 试了ma ...

  4. Linux Gcc编译错误(转载)

    转自:http://www.linuxidc.com/Linux/2012-01/52153.htm Linux系统下的c编程与Windows有所不同,如果你在用gcc编译代码的时候提示‘for’ l ...

  5. linux --> gcc编译之路径搜索

    gcc编译之路径搜索 头文件 --> 搜寻先从-I开始; --> 找gcc的环境变量 : C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PA ...

  6. Linux gcc编译之-std选项

    用GCC编译代码时候后面带有-std=c++1z 的选项,这是指定c/c++的标准.具体的标准如下,详细信息可以看引用里面的详细说明

  7. Linux gcc编译(动态库,静态库)

    1. linux 库路径: /lib , /usr/lib , /usr/local/lib 2.linux 编译静态库 a.编写源文件vi pr1.c void print1(){    print ...

  8. linux gcc 编译时头文件和库文件搜索路径

    一.头文件    gcc 在编译时寻找所需要的头文件 :    ※搜寻会从-I开始    ※然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INC ...

  9. Linux GCC编译库

    本文主要解决以下几个问题 1).为什么要使用库? 2).库的分类 3).创建自己的库 为什么要使用库? 或许大家对自己初学 Linux时的情形仍记忆尤新吧.如果没有一个能较好的解决依赖关系的包管理器, ...

  10. Linux GCC编译使用动态、静态链接库 (转)

    原文出处:http://blog.csdn.net/a600423444/article/details/7206015 在windows下动态链接库是以.dll后缀的文件,二在Linux中,是以.s ...

随机推荐

  1. 安装mysql zip 安装包 Navicat连接

    笔者在安装mysql时一直出现各种问题,今天难得成功一次,决定记录一下,留作纪念与参考 安装第一步,下载mysql https://dev.mysql.com/downloads/mysql/ 以在w ...

  2. php函数strtotime结合date时间修饰语的使用

    下面简单介绍在项目开发中date时间函数和strtotime所遇到的问题,以及解决办法. 原文地址:小时刻个人技术博客 > http://small.aiweimeng.top/index.ph ...

  3. 查看 dll 是32位还是64位 的 bat

    ******* @echo offset work_path=./cd %work_path% for /R %%s in (*.dll) do ( echo %%~nxs call dumpbin ...

  4. 封装axios方法之一

    一.先来说说为什么要封装axios异步请求. 我们前端开发中总是会遇到跨域的问题,我们会配置proxy来解决跨域的问题,无论是vue 还是react. 如何配置我这里就不说了. 然后...然后我们就会 ...

  5. 北京Uber优步司机奖励政策(1月30日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  6. P1803 凌乱的yyy

    P1803 凌乱的yyy 题目背景 快noip了,yyy很紧张! 题目描述 现在各大oj上有n个比赛,每个比赛的开始.结束的时间点是知道的. yyy认为,参加越多的比赛,noip就能考的越好(假的) ...

  7. java 编码二进制写法、十六进制用源代码表示

    二进制: int a = 0b10; a其实=2 八进制: int a = 01; a其实=8 十六进制: int a = 0x1; a其实=16

  8. 两分钟了解Docker的优势

    本文来自网易云社区 我们主要从Docker对业务架构和生产实践的角度来分析. 随着业务规模的逐渐扩大,产品复杂度也随着增加,企业需要解决快速迭代.高可靠和高可用等问题,一个自然的选择是服务化的拆分,把 ...

  9. 关于DataTable.Select方法偶尔无法正确查到数据的处理方法

    项目中经常用DataTable在内存中存储并操作数据,在进行报表开发的时候,报表的各种过滤功能用这个内存表可以大现身手,但最近在使用过程中却遇到一个奇怪的现象,现将该问题及处理方法记录一下.这是在做护 ...

  10. 函数返回const,以便控制访问

    #include <stdio.h> class const_out_parameter{ private: ]; public: int* const_out_parameter_tes ...