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: 显示警告,但是只是显示编译器认为的会 ...
随机推荐
- 【Codeforces 788C】The Great Mixing
http://codeforces.com/contest/788/problem/C 显然如果有两杯一样的酒,把它们当作同一杯就好了.所以k<=1e6毫无意义. 若选的x杯酒的浓度分别为a,b ...
- html标签对应的英文原文 - 司徒正美
标签 对应英文 说明 <!--> / 注释 <!DOCTYPE> document type 文档类型 <a> anchor 超链接 <abbr> ab ...
- Secret 的使用场景 - 每天5分钟玩转 Docker 容器技术(109)
我们可以用 secret 管理任何敏感数据.这些敏感数据是容器在运行时需要的,同时我们不又想将这些数据保存到镜像中. secret 可用于管理: 用户名和密码. TLS 证书. SSH 秘钥. 其他小 ...
- dubbo源码—SPI
Java中的SPI SPI,Service Provider Interface,java中提供的一种使程序可扩展的方式,系统定义好接口规范,供其他服务提供方实现,服务提供方将自己jar包META-I ...
- 两小时搞定C#版超级战舰游戏
课程简单介绍 游戏开发已然是眼下火星上都非常火的开发技术.而休闲的小游戏超级战舰也是眼下白领中最流行的小游戏.那超级战舰游戏是如何在两个小时高速搞定的呢?休闲类的小游戏高速开发的指南是什么?C#是如何 ...
- CCFlow最近在山东济南总部举行组团培训活动,有參加的能够报名
最近.CCFlow将会组织培训,由总设计师--周朋先生亲自授课. 行程 培训内容 第一天 ccflow的概述功能简 ...
- 【Linux探索之旅】第二部分第五课:用户和权限,有权就任性
内容简单介绍 .第二部分第五课:用户和权限,有权就任性 2.第二部分第六课预告:Nano,刚開始学习的人的文本编辑器 用户和权限.有权就任性 今天的标题也挺任性的啊,虽说小编是一个非常本分的人(真的吗 ...
- LINUX6安装Oracle10g无法启动安装界面解决
***********************************************声明*************************************************** ...
- 小强的Hadoop学习之路
本人一直在做NET开发,接触这行有6年了吧.毕业也快四年了(6年是因为大学就开始在一家小公司做门户网站,哈哈哈),之前一直秉承着学要精,就一直一门心思的在做NET(也是懒吧).最近的工作一直都和大数据 ...
- iOS 用户密码 数字字母特殊符号设置 判断
//直接调用这个方法就行 -(int)checkIsHaveNumAndLetter:(NSString*)password{ //数字条件 NSRegularExpression *tNumRegu ...