GCC编译器编译链接
在gcc编译器环境下,常见的文件扩展名的含义如下:
.c:C源程序,经过预编译后的源程序也为.c文件,它可以通过-E参数输出。
.h:头文件
.s:经过编译得到的汇编程序代码,它可以通过-S参数输出。
.o:目标文件
.a:函数库
Gcc编译器常见语法:
-c:只进行编译,不进行链接,输出的是与源文件同名的.o文件。
-o:指定生成的文件的名称。链接生成可执行文件,这个参数后可以带可执行文件的名字,如果没有指定可执行文件的名字,则会默认为a.out。
-S:输出汇编代码文件,输出一个与源文件同名的.s文件,这个文件中的内容为汇编程序。
-O:在编译链接的过程中进行优化,在编译过程中对代码进行优化,代码经过优化后再利用汇编程序翻译成目标代码。
Eg.
只对程序进行编译:
gcc –c –O –I dirname x.c
其中-c是编译x.c,-O是对代码进行优化,-I是指x.c所使用的头文件啊在目录dirname中。如果只使用了系统头文件/usr/include则不用特意指定。
对编译产生的x.o文件进行链接:
gcc –L dirname –lyyy x.o –o x
其中-L指链接过程中要使用的函数库libyyy.a(-lyyy说明要使用函数库libyyy.a)在目录dirname中。 如果是使用系统库则不用特意指出/usr/lib和/lib。-o x指定了可执行文件的名称。
Eg.编译运行hello world
出现如下错误:

错误原因:不能同时使用-c 和-o,那么生成hello.o和可执行文件hello要分两步进行即编译和链接要分开操作。
记得要分开操作:

如果要生成hello.o,还可以使用命令gcc –c hello.c –o hello.o
编译链接还可以直接使用gcc –o hello hello.c

如果直接编译hello.c结果如下,生成一个名称为a.out的执行文件:

可以利用-o给执行文件命名:

GCC编译器编译链接的更多相关文章
- C语言_来了解一下GCC编译器编译C可执行脚本的过程
GCC简介 Linux系统下的gcc(GNU C Compiler)是GNU推出的功能强大.性能优越的多平台编译器,是GNU的代表作品之一.gcc是可以在多种硬体平台上编译出可执行程序的超级编译 ...
- 通过GCC编译器编译c语言
GCC编译C源代码的四个步骤 GCC编译C源代码有四个步骤:预处理---->编译---->汇编---->链接. 可以利用GCC的参数来控制执行的过程,这样就可以更深入的了解编译C程序 ...
- 【C编程基础】C编译链接命令gccc
1.gcc安装 rpm -qa|grep gcc ==>检查gcc是否安装 gcc -v ==>检查gcc版本 yum -y install gcc ==>安装gcc 2.基本语法 ...
- Keil5.15使用GCC编译器链接.a库文件
我们知道,当使用第三方的代码时,人家有可能会扔个Lib文件给你.这时候,别人仅仅要提供header文件给你,则你就能够通过Lib文件及header的函数声明,对Lib中的函数进行调用.在Keil中假设 ...
- [转]C++编译链接过程详解
C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接.编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程.链接是把目标文件.操作 ...
- gcc编译器如何生成指定的文件名
放哪里都可以,进到文件所放路径,用gcc编译器编译.如:gcc -o test test.c 就是说把test.c文件编译链接生成test可执行程序.在linux下生成test.out,然后再命令:. ...
- gcc/g++等编译器 编译原理: 预处理,编译,汇编,链接各步骤详解
摘自http://blog.csdn.net/elfprincexu/article/details/45043971 gcc/g++等编译器 编译原理: 预处理,编译,汇编,链接各步骤详解 C和C+ ...
- 利用GCC编译器生成动态链接库和静态链接库
转载请标明:http://www.cnblogs.com/winifred-tang94/ 1.编译过程 gcc –fPIC –c xxx.c 其中-fPIC是通知gcc编译器产生位置独立的目标代码. ...
- C++常见gcc编译链接错误解决方法
除非明确说明,本文内容仅针对x86/x86_64的Linux开发环境,有朋友说baidu不到,开个贴记录一下(加粗字体是关键词): 用“-Wl,-Bstatic”指定链接静态库,使用“-Wl,-Bdy ...
随机推荐
- each(callback) 对于每个匹配的元素所要执行的函数
以每一个匹配的元素作为上下文来执行一个函数. 意味着,每次执行传递进来的函数时,函数中的this关键字都指向一个不同的DOM元素(每次都是一个不同的匹配元素).而且,在每次执行函数时,都会给函数传递一 ...
- Centos6.5 安装 RabbitMQ3.6.1
Centos6.5 安装 RabbitMQ3.6.1 个人安装RabbitMQ总结: 安装编译工具 yum -y install make gcc gcc-c++ kernel-devel m4 nc ...
- SalesForce 入门
标签: Salesforce.com 一开始是一个云端的销售自动化(Sales Force Automation, SFA)以及客户关系管理工具(Customer Relationship Manag ...
- python2 到 python3 转换工具 2to3
windows系统下的使用方法: (1)将python安装包下的Tools/Scripts下面的2to3.py拷贝到需要转换文件目录中. (2)dos切换到需要转换的文件目录下,运行命令2to3.py ...
- 在mysql数据库原有字段后增加新内容
update table set user=concat(user,$user) where xx=xxx; [注释]这个语法要求原来的字段值不能为null(可以为空字符''):
- 使用XML定制Ribbon的一点小前奏(稍微再进一步的理解XML)
定制文档级Ribbon界面的实现思路: 1.excel的文件使用rar+xml的形式保存在本地. 2.用压缩软件打开文件,以规范的格式直接编缉或添加xml文件 3.使用excel文件时,主程序会解析x ...
- jdom xml解析
import org.jdom.Document; import org.jdom.Element; import org.jdom.input.SAXBuilder; import org.xml. ...
- 《K&R》中引用的几个排序算法(shellsort、)以及一个自己乱写的排序
留待期末考后更新... void shellsort(int v[], int n) { int gap, i, j, temp; ; gap > ; gap /= ) for(i = gap; ...
- js之oop <四>对象管理
对象扩展管理 Object.isExtensible() 检测对象是否可扩展(一般返回true).Object.preventExtensions() 防止对象扩展. var p = {p1:&quo ...
- Android Gradle 完整指南
为什么需要学Gradle? Gradle 是 Android 现在主流的编译工具,虽然在Gradle 出现之前和之后都有对应更快的编译工具出现,但是 Gradle 的优势就在于它是亲儿子,Gradle ...