一个用c语言写的程序把他编译成计算机可执行的文件,一般有4个步骤

/*================================================================
* Copyright (C) 2018 . All rights reserved.
*
* 文件名称:helloworld.c
* 创 建 者:ghostwu(吴华)
* 描 述:gcc编译器用法演示
*
================================================================*/ #include <stdio.h>
#define HELLO "hello world!\n" int main(int argc, char *argv[])
{
printf( HELLO );
return ;
}

1,预处理:这个步骤,主要是包含头文件,展开宏定义

gcc -E helloworld.c -o helloworld.i

2,生成汇编代码

gcc -S helloworld.i -o helloworld.s

3,编译汇编

gcc -c helloworld.s -o helloworld.o

4,链接

gcc helloworld.o -o helloworld

通常写完程序,我们用 gcc helloworld.c -o helloworld 直接完成以上四个步骤

gcc常用选项含义:

1. -o output_filename
确定可执行文件的名称为output_filename。如果不给出这个选项,gcc就给出预设的可执行文件名a.out。

2. -c
只编译,不链接成为可执行文件,编译器只是由输入的.c等源文件生成.o为后缀的目标文件。

3. -g
产生调试工具(gdb)所必要的符号信息,要想对编译出的程序进行调试,就必须加入这个选项。

4. -ldirname
将dirname所指出的目录加入到程序头文件目录列表中。

5. -Ldirname
将dirname所指出的目录加入到库文件的目录列表中。

6. -Wall
生成所有警告信息。

gcc编译多个模块

helloworld.h

 ==============================================================
* Copyright (C) . All rights reserved.
*
* 文件名称:helloworld.h
* 创 建 者:ghostwu(吴华)
* 描 述:
*
================================================================*/ #ifndef _HELLO_H_
#define _HELLO_H_
void say_hello( const char* name );
#endif

helloworld.c

/*================================================================
* Copyright (C) 2018 . All rights reserved.
*
* 文件名称:helloworld.c
* 创 建 者:ghostwu(吴华)
*
================================================================*/ #include <stdio.h>
#include "helloworld.h" void say_hello( const char* name ) {
printf( "%s\n", name );
}

main.c

/*================================================================
* Copyright (C) 2018 . All rights reserved.
*
* 文件名称:main.c
* 创 建 者:ghostwu(吴华)
* 描 述:
*
================================================================*/ #include "helloworld.h" int main(int argc, char *argv[])
{
say_hello( "hello ghostwu" );
return ;
}

编译命令:

gcc helloworld.c main.c -o hello

打包静态库(就是一堆通用函数的集合,用.o文件打包):

1,首先生成.o文件

gcc -c helloworld.c -o helloworld.o

2,ar rcs libhello.a helloworld.o

r:替换  c:创建 s:保存

把helloworld打包成 libhello.a静态库

3,用静态库编译 生成 可执行文件

gcc -Wall main.c libhello.a -o main

也可以使用l和L 选项

小写的l: 指定库文件名

大写的L: 指定库所在的路径

gcc -Wall main.c -o main2 -lhello( 这种方式会报错,在链接库的时候,没有用L指定路径,默认情况下 不会在当前目录查找静态库 )

gcc -Wall -L. main.c -o main2 -lhello( L后面跟个. 代表当前目录下查找所链接的库(libhello.so) ), -lhello: 省略lib和后缀(.so)

这个时候删除静态库libhello.so,生成的main和main2文件,依然能执行,因为静态库已经被包含在可执行文件中

gcc编译器用法的更多相关文章

  1. gcc编译器用法(自学总结)

    GCC仅仅意味着GNU C Compiler. gcc工作四个步骤:预处理,编译,汇编,连接. 1.预处理: 编译器将C源代码中的包含的头文件如stdio.h编译进来,用户可以使用gcc的选项&quo ...

  2. 一.复习GCC编译器的用法

    1.复习GCC编译器的用法 欲善其工,那么要先利其器.在这个C语言巩固与提高的阶段中,如果想要更好的达成预期目标,首先就要熟练掌握GCC编译器的用法.以下是GCC相关知识: GCC使用语法 gcc 选 ...

  3. gcc基本用法

    GCC基本用法 GCC最基本的用法是: gcc [option] filenames option:编译器所需要的编译选项 filenames:要编译的文件名 gcc编译流程 都以 hello.c 为 ...

  4. C语言的本质(33)——GCC编译器入门

    GCC(GNU CompilerCollection,GNU编译器套装),是由 GNU 开发的编程语言编译器.它是以GPL许可证所发行的自由软件,也是 GNU计划的关键部分.GCC原本作为GNU操作系 ...

  5. gcc编译器对宽字符的识别

    最早是使用VC++工具来学习C++,学的越多就越对VC挡住的我看不见的东西好奇,总想多接触一些开发环境,今日抽空摸索了一下CodeBlocks这个开源的IDE使用方法,配置的编译器是MinGW的gcc ...

  6. gcc编译器命令使用详解

    1.gcc包含的c/c++编译器gcc,cc,c++,g++,gcc和cc是一样的,c++和g++是一样的,(没有看太明白前面这半句是什么意思:))一般c程序就用gcc编译,c++程序就用g++编译 ...

  7. GCC编译器基础入门

    导语 GCC(GNU Compiler Collection,GNU 编译器套件) 是由 GNU 开发的编程语言编译器,支持C.C++.Objective-C.Fortran.Java.Ada和Go语 ...

  8. gcc编译器参数

    [gcc编译步骤] 1.预处理,生成.i的文件[预处理器cpp] 2.将预处理后的文件转换成汇编语言,生成文件.s[编译器egcs] 3.由汇编变为目标代码(机器代码)生成.o的文件[汇编器as] 4 ...

  9. gcc编译器常用选项的含义

    -w: 关闭编译时的警告, 也就是编译后不显示任何warning,因此有时编译中会出现一些诸如数据转换之类的可忽略警告, -Wall: 显示编译后所有警告 -W: 显示警告,但是只是显示编译器认为的会 ...

随机推荐

  1. 一个在 .NET 一线战斗了十年的 C# 程序员的内心独白

    这是我的一个内心独白,内容有点长,希望你能耐心地看完. 估计看到标题,大部分人都会说:哇!大牛!膜拜--之类的.至于是不是大牛,那我不知道,毕竟我依然有很多地方不懂,特别是现在已经流行的 Redis ...

  2. react-native从开始趟的坑

    好多天没更了..... 之前用的华为手机老人机真机调试的,最近几天换了小米,又遇上了坑... 跟之前所有手机一样打开开发者模式,开发者模式是(关于手机--版本号---一直点啊点--退出---辅助功能里 ...

  3. JAVA-----基于POI实现对Excel导入

    在日常项目开发中, 数据录入和导出是十分普遍的需求,因此,导入导出也成为了开发中一个经典的功能.数据导出的格式一般是excel或者pdf,而批量导入的信息一般是借助excel来减轻工作量,提高效率. ...

  4. 美杂志初次取得答应走进google奥秘研讨所Google X

    Google X作为google最奥秘的研讨部分.开发过google眼镜.无人驾驶轿车等多项创新项目.至今为止.Google X从未答应媒体进入採訪.但近日,据日本GIGAZINE站点报导,美国杂志& ...

  5. HTML5经常使用知识

    今日做项目.涉及到native和H5页面的交互 1.document.readyState document.readyState:推断文档是否载入完毕. firefox不支持. 这个属性是仅仅读的, ...

  6. Javascript 进阶 面向对象编程 继承的一个样例

    Javascript的难点就是面向对象编程,上一篇介绍了Javascript的两种继承方式:Javascript 进阶 继承.这篇使用一个样例来展示js怎样面向对象编程.以及怎样基于类实现继承. 1. ...

  7. C语言之——文件操作模式

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47450667 "rt" 仅仅读打开一个文本文件.仅仅同意读数据 ...

  8. Redis的那些最常见面试问题

    随笔:经过长达一周的奔波和面试,电话面试,回首今天终于成功的入职了,总共面试了大概10家公司,包括阿里,京东,IBM等等,京东技术过了,学历因为非统招就被pass了,阿里面了2次电话面试就没下文了,估 ...

  9. 深入理解计算机系统_3e 第八章家庭作业 CS:APP3e chapter 8 homework

    8.9 关于并行的定义我之前写过一篇文章,参考: 并发与并行的区别 The differences between Concurrency and Parallel +---------------- ...

  10. ESL翻译:Linear Methods for Regression

    chapter 3: Linear Methods for Regression 第3章:回归的线性方法 3.1 Introduction A linear regression model assu ...