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: 显示警告,但是只是显示编译器认为的会 ...
随机推荐
- 关于C#中函数的认识
对于C#语言中的函数,大概分之为函数的声明及其调用. 函数的声明: 1.函数的声明是指给一段代码取名称. 2.函数的声明位置必须在类中. 3.函数声明的语法: 函数声明的语法:static void ...
- springBoot actuator监控配置及使用
准备环境: 一个springBoot工程 第一步:添加以下依赖 <dependency> <groupId>org.springframework.boot</group ...
- webrtc视频数据render流程
- 利用linux shell自己主动顶贴
在论坛上面发帖问个什么东西的话,一旦不顶.帖子就秒沉了,可是又实在不想每时每刻都去顶,怎么办?以下展示了怎样利用shell 的crontab实现自己主动顶贴. 闲话不多说了,以豆瓣为例-– 1: 用c ...
- MacBook 经常使用快捷键
Mac OS X系统图形表示方法 ⇧ = shift ⌃ = control ⌥ = option / alt Home=fn + ◄ End=fn + ► Page Up=fn + ▲ Pag ...
- 003Java语言环境搭建
JRE,JDK JRE(Java Runtime Environment java运行环境):包括java虚拟机和java程序所需要的核心类库, 如果要运行一个开发好的java程序,计算机中只需要安装 ...
- XML约束(3)
本节要点: 了解XML的约束模式 了解DTD 了解Schema 1 了解XML的约束模式 计算机程序在处理XML文档之前,必须能够解析出XML文档的内容中各个元素的相关信息.将解析出来的信息再交给下游 ...
- 【SqlServer系列】AS的用法
1 概述 本篇文章简要分析,在SQL SERVER中,AS的基本用法. 2 具体分析 2.1 定义变量类型 )='Alan_beijing' 2.2 取别名 2.2.1 为结果集列取别名 c ...
- 自学Zabbix3.9.1-模板Templates-创建
自学Zabbix3.9.1-模板Templates-创建 1. 模板介绍 模板是一组可以方便地应用于多个主机的实体. 实体可能是: 项目 触发器 图 应用程序 屏幕(因为Zabbix 2.0) 低层次 ...
- 【java设计模式】【创建模式Creational Pattern】建造模式Builder Pattern
package com.tn.pattern; public class Client { public static void main(String[] args) { Director dire ...