gcc编译器用法
一个用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编译器用法的更多相关文章
- gcc编译器用法(自学总结)
GCC仅仅意味着GNU C Compiler. gcc工作四个步骤:预处理,编译,汇编,连接. 1.预处理: 编译器将C源代码中的包含的头文件如stdio.h编译进来,用户可以使用gcc的选项&quo ...
- 一.复习GCC编译器的用法
1.复习GCC编译器的用法 欲善其工,那么要先利其器.在这个C语言巩固与提高的阶段中,如果想要更好的达成预期目标,首先就要熟练掌握GCC编译器的用法.以下是GCC相关知识: GCC使用语法 gcc 选 ...
- gcc基本用法
GCC基本用法 GCC最基本的用法是: gcc [option] filenames option:编译器所需要的编译选项 filenames:要编译的文件名 gcc编译流程 都以 hello.c 为 ...
- C语言的本质(33)——GCC编译器入门
GCC(GNU CompilerCollection,GNU编译器套装),是由 GNU 开发的编程语言编译器.它是以GPL许可证所发行的自由软件,也是 GNU计划的关键部分.GCC原本作为GNU操作系 ...
- gcc编译器对宽字符的识别
最早是使用VC++工具来学习C++,学的越多就越对VC挡住的我看不见的东西好奇,总想多接触一些开发环境,今日抽空摸索了一下CodeBlocks这个开源的IDE使用方法,配置的编译器是MinGW的gcc ...
- gcc编译器命令使用详解
1.gcc包含的c/c++编译器gcc,cc,c++,g++,gcc和cc是一样的,c++和g++是一样的,(没有看太明白前面这半句是什么意思:))一般c程序就用gcc编译,c++程序就用g++编译 ...
- GCC编译器基础入门
导语 GCC(GNU Compiler Collection,GNU 编译器套件) 是由 GNU 开发的编程语言编译器,支持C.C++.Objective-C.Fortran.Java.Ada和Go语 ...
- gcc编译器参数
[gcc编译步骤] 1.预处理,生成.i的文件[预处理器cpp] 2.将预处理后的文件转换成汇编语言,生成文件.s[编译器egcs] 3.由汇编变为目标代码(机器代码)生成.o的文件[汇编器as] 4 ...
- gcc编译器常用选项的含义
-w: 关闭编译时的警告, 也就是编译后不显示任何warning,因此有时编译中会出现一些诸如数据转换之类的可忽略警告, -Wall: 显示编译后所有警告 -W: 显示警告,但是只是显示编译器认为的会 ...
随机推荐
- 处理eclipse启动时报java.lang.IllegalStateException
这是我写的第一篇博客,博客我来了: 我是好学的人,希望在这上面遇到志同道合的人,对技术有更高追求的人: 重启eclipse的时候报出来 An error has occurred, See the l ...
- NGUI_Atlas
二.NGUI的图集制作: 1.概述: 将导入的图片资源全部制成一张图集,可以节约资源,当制成图集后,就可以将导入的图片资源进行删除, 再后续的操作直接使用图集中的图片即可,NGUI自带的Atlas M ...
- JavaWeb 之文件的上传下载
又到了每周更新博客的时候了,每看到自己发布的随笔阅读量上涨的时候就特别开心,我也会尽自己的努力提高自己的水平,总结出通俗易读的学习笔记,还望大家能多多支持!!! ------------------- ...
- python用户管理系统
学Python这么久了,第一次写一个这么多的代码(我承认只有300多行,重复的代码挺多的,我承认我确实垃圾),但是也挺不容易的 自定义函数+装饰器,每一个模块写的一个函数 很多地方能用装饰器(逻辑跟不 ...
- 关于SPI通信原理与程序实现
第一次接触SPI是因为当时用到NRF24L01,需要用SPI进行通信.因为2401上面写着MOSI.MISO.SS.RST,当时以为只要用到SPI就肯定有这几个引脚,以至于限制了自己的思维.只认识MI ...
- lucene构建同义词分词器
lucene4.0版本号以后 已经用TokenStreamComponents 代替了TokenStream流.里面包含了filter和tokenizer 在较复杂的lucene搜索业务场景下,直接网 ...
- Java学习之道:Java操作Excel之导出下载
页面放置一个button进行点击导出事件 <h:commandLink target="_parent" value="导出" ac ...
- ES5继承
原型继承 <script type="text/javascript"> function Father(){}//构造函数 //原型属性 Father.prototy ...
- 自学Python1.1-简介
1.python语言介绍 python的创始人:Guido Van Rossum 2.python是一门什么样的语言 2.1 编程语言主要从以下几个角度进行分类:编译型,静态型,动态性,强类型定义语 ...
- Linux:快速找到占用CPU过高的Thread
1.通过top命令找到高耗CPU的进程,记下PID 2.使用命令ps -mp PID -o THREAD,tid,time找到高耗CPU的那些线程 3.jstack PID 4.对每个高耗CPU的线程 ...