一个用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. JavaWeb学习总结(三)——Tomcat服务器学习和使用(二)(转)

    转载自 http://www.cnblogs.com/xdp-gacl/p/3744053.html 一.打包JavaWeb应用 在Java中,使用"jar"命令来对将JavaWe ...

  2. pku 2488 A Knight&#39;s Journey (搜索 DFS)

    A Knight's Journey Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 28697   Accepted: 98 ...

  3. BNUOJ34977夜空中最亮的星(数学,向量的应用)

    夜空中最亮的星 Time Limit: 2000ms Memory Limit: 65536KB 64-bit integer IO format: %lld      Java class name ...

  4. UICollectionView具体解释

    初始化部分: UICollectionViewFlowLayout *flowLayout= [[UICollectionViewFlowLayout alloc]init]; self.myColl ...

  5. Timus 1180. Stone Game 游戏题目

    Two Nikifors play a funny game. There is a heap of N stones in front of them. Both Nikifors in turns ...

  6. bmp文件格式中rgb555与rgb888之间的转换,24位与16位位图的转换

    今日,有同事问我.rgb555模式下的位图文件的格式问题,于是花了一下午的时间通过推測与測试,分析出了例如以下bmp文件在rgb555模式下的文件存储规律: 1:bmp文件的文件信息头中的biBitC ...

  7. uva--10700

    题意: 输入一串仅仅含有+和*号的表达式,能够通过加入括号来改变表达式的值,求表达式的最大最小值. 思路: 表达式中的数都是不大于20的正整数,由a*b+c<=a*(b+c)能够知道.先算乘法后 ...

  8. mysql连接错误问题

    ERROR 1130: Host '192.168.1.3' is not allowed to connect to this MySQL server 解决方法:1. 改表法.可能是你的帐号不允许 ...

  9. 【java提高】---数组增删 list删除 map删除

    数组增删 集合删除 1.数组增删 package com.test; import java.util.List; import java.util.ArrayList; import java.ut ...

  10. 每周.NET前沿技术文章摘要(2017-06-21)

    汇总国外.NET社区相关文章,覆盖.NET ,ASP.NET等内容: .NET .NET Core Magic: Develop on one OS, run on another 链接:https: ...