gcc -S xx】的更多相关文章

编译器的核心任务是把C程序翻译成机器的汇编语言(assembly language).汇编语言是人类可以阅读的编程语言,也是相当接近实际机器码的语言.由此导致每种 CPU 架构都有不同的汇编语言. 实际上,GCC 是一个适合多种 CPU 架构的编译器,不会把C程序语句直接翻译成目标机器的汇编语言,而是在输入语言和输出汇编语言之间,利用一个中间语言,称为 RegisterTransfer Language(简称 RTL,寄存器传输语言).借助于这个抽象层,在任何背景下,编译器可以选择最经济的方式对…
C语言代码在交给编译器之前,会先由预处理器进行一些文本替换方面的操作,例如宏展开.文件包含.删除部分代码等. 在正常的情况下,GCC 不会保留预处理阶段的输出文件,也即.i文件.然而,可以利用-E选项保留预处理器的输出文件,以用于诊断代码.-E选项指示 GCC 在预处理完毕之后即可停止. 默认情况下,预处理器的输出会被导入到标准输出流(也就是显示器),可以利用-o选项把它导入到某个输出文件: $ gcc -E circle.c -o circle.i 表示把预处理的结果导出到 circle.i…
-c选项表示编译.汇编指定的源文件(也就是编译源文件),但是不进行链接.使用-c选项可以将每一个源文件编译成对应的目标文件. 目标文件是一种中间文件或者临时文件,如果不设置该选项,gcc 一般不会保留目标文件,可执行文件生成完成后就自动删除了. 注意,使用-c选项表示只编译源文件,而不进行链接,因此,对于链接中的错误是无法发现的. 下面例子演示了 gcc 编译器在使用-c选项的时候不会发现链接错误. 1) 编写如下的两个源文件. 在 func.c 中定义了 func_a() 函数: #inclu…
GCC   -l  option is to link the library. It can use for static and share link.  Link -l with library name without the lib prefix and the .a or .so extensions. Static : gcc   -static -ltest xx.c, it will link with libtest.a share : gcc –ltest xx.c it…
gcc编译器 $ gcc -o XX.exe XXX.c ddd.c $ gcc -o XX.asm -S XXX.c  编译生成可执行文件,并执行程序,缺省的时候,gcc 编译出来的文件是a.out -c 只编译并生成目标文件 -v/--v/--version      查看gcc版本号 -I 指定头文件目录,之间没有空格(例如:$ gcc -I./dir  xx.c xx.c -o app) -g 包含调试信息 -On n=0~3 编译优化,n越大优化得越多 -w 不生成任何警告信息 -Wa…
GCC学习 1.gcc是根据后缀名来区分文件的 .c : c语言源文件 .a : 目标文件构成的库文件 .C/.cc/.cxx : c++源文件 .h : 头文件 .i : 预处理过的C源文件 .ii : 预处理过的C++源文件 .o : 编译后的目标文件 .s : 汇编语言源代码文件 .S : 经过预处理的汇编语言源代码文件 2.生成可执行文件四个步骤 预处理 :宏展开,头文件引入, 编译 : 汇编 : 连接 : 3.GCC编译选项 -o :指定可执行文件的名字,默认是a -c :只做到编译即…
2015.2.27星期五,小雨 标准IO实现的复制功能: #include <stdio.h>#include <errno.h> #define N 64 int main(int argc, char *argv[]){ int n; char buf[N]; FILE *fps, *fpd; if(argc < 3) { printf("usage : %s <src_file><dst_file>\n",argv[0]);…
main.c  main.o/main.obj  main/main.exe          编译                连接 程序运行;      两步: gcc/g++  -c  main.c/main.cpp  -> main.o              gcc/g++ -o main  main.o -> main(可执行文件)     一步:  gcc -o main mian.c  -> main    工程文件:       rm  *.o     gcc  -…
分析ELF文件: 首先编写一个.c文件,并使用gcc -c xx.c -o xx.o 对其进行编译. 我在这个实践中是ELF_1.o文件. 接下来输入ls -l ELF_1.o 查看重定位文件的信息. 接下来以十六进制来查看该文件信息.输入:hexdump -x ELF_1.o 显示信息的最左一列表示的是偏移地址的16进制表示. 查看ELF文件头定义的规范.打开elf.h查看各部分内容的定义. 我们可以看出,32位的系统与64位的系统的ELF头部分结构大致相同.只是个别字段所占用的字节个数有不同…
测试-1-ch03 任务详情 通过输入gcc -S -o main.s main.c,将下面c程序"week04学号.c"编译成汇编代码 int g(int x){ return x+3; } int f(int x){ int i = 学号后两位: return g(x)+i; } int main(void){ return f(8)+1; } 删除汇编代码中 . 开头的代码,提交f函数的汇编代码截图,图中用矩形标出函数栈帧的形成和销毁的代码 知识点 C语言调用机制使用了栈数据结构…
目的:编写一个实用的makefile,能自动编译当前目录下所有.c/.cpp源文件,支持二者混合编译.并且当某个.c/.cpp..h或依赖的源文件被修改后,仅重编涉及到的源文件,未涉及的不编译. 二要达到这个目的,用到的技术有:1-使用wildcard函数来获得当前目录下所有.c/.cpp文件的列表.2-make的多目标规则.3-make的模式规则.4-用gcc -MM命令得到一个.c/.cpp文件include了哪些文件.5-用sed命令对gcc -MM命令的结果作修改.6-用include命…
set cursorlineset history=1700set nocompatible  "去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限  set nufiletype plugin onfiletype indent onset autoreadset so=7set wildmenuset wildignore=*.o,*~,*.pycset wildignore+=.git\*,.hg\*,.svn\*set rulerset cmdheight=2set hidse…
C语言预处理理论1.从源码到可执行文件的过程(1)源码.c->(编译)->elf可执行程序(2)源码.c->(编译)->目标文件.o->(链接)->elf可执行程序(3)源码.c->(编译)->汇编文件.s->(汇编)->目标文件.o->(链接)->(4)源码.c->(预处理)->预处理过的.i源文件->(编译)->汇编文件.s->(汇编)->目标文件.o->(链接)->elf可执行程序…
GCG -o选项用来指定输出文件,它的用法为: [infile] -o [outfile] [infile] 表示输入文件(也即要处理的文件),它可以是源文件,也可以是汇编文件或者是目标文件:[outfile] 表示输出文件(也即处理的结果),它可以是预处理文件.目标文件.可执行文件等. [infile] 和 [outfile] 可以是一个文件,也可以是一组文件: 如果 [infile] 是一组文件,那么就表示有多个输入文件: 如果 [outfile] 是一组文件,那么就表示有多个输出文件. 如…
亲测 可以安装 过程并不复杂 但可能需要一些时间 认真一点 按照步骤 一定可以成功哒 其他版本可以将ftp.gnu.org/gnu/gcc/敲入浏览器,找到自己需要的文件:[安装过4.9.0:成功:用的是gmp-4.3.2 mpc-0.8.1 mpfr-2.4.2] 以4.6.1为例,其他的版本类似,下载时改路径[蓝色字体部分]就可以了.地址都是在二.1.那里,改掉最后带版本的那部分就可以了 一.安装环境系统版本:redhat 5.5原GCC版本:gcc-4.1.2新GCC版本:gcc-4.6.…
一.GCC GNU编译器套件(GNU Compiler Collection)包括C.C++.Objective-C.Fortran.Java.Ada和Go语言的前端,也包括了这些语言的库(如libstdc++.libgcj等等).GCC的初衷是为GNU操作系统专门编写的一款编译器.GNU系统是彻底的自由软件.此处,“自由”的含义是它尊重用户的自由.[1]    目录 1创作背景 2结构 ▪ 前端接口▪ 中介接口▪ 后端接口 3基本用法 4基本规则 5语言支持 6执行过程 7执行过程示例 8处理…
GCC(GNU Compiler Collection,GNU编译器套装),是一套由GNU开发的编程语言编译器.它是一套以GPL及LGPL许可证所发布的自由软件,也是GNU计划的关键部分,亦是自由的类Unix及苹果电脑Mac OS X 操作系统的标准编译器.GCC(特别是其中的C语言编译器)也常被认为是跨平台编译器的事实标准.详见百度百科.维基百科.gcc官网. 一.GCC的编译过程 二.GCC的常用操作 三.官方参考手册的阅读 四.主要参考资料 GCC的编译过程主要分为四个阶段,预处理(Pre…
link时,若liba.a依赖libb.a,若这样写 -lb -la,则链接通不过,gcc有个选项:-Xlinker ,可以让gcc在链接时反复查找依赖库,用法 : gcc -shared -o libxx.so xx.o -L. -Xlinker "-(" -lb -la "-)" -Xlinker 这样,包含在 -Xlinker  "-("      和       "-)" -Xlinker  之间的库之间的依赖关系就不…
1.现在对两个文件生成可执行文件 //thanks.c #include <stdio.h> int main(void) { printf("Hello World\n"); thanks_2(); } //thanks_2.c #include <stdio.h> int thanks_2(void) { printf("Hello World2\n"); ); } 2.步骤 一.cd 到文件所在目录 二.gcc -c 编译 三.gcc…
Redhat 的GCC编译器4.1版本号,为SSE4,AVX,AVX2支持不够好,官方建议4.7以上. 就这样开始了GCC升级之路. 因为Redhat 5.5它安装在一个虚拟机.全然解决,经过若干尝试,以下过程可行. 主要參考例如以下: http://blog.sciencenet.cn/blog-714229-600604.html http://blog.sciencenet.cn/blog-714229-600389.html http://blog.rekfan.com/articles…
假如现在我们有如下代码需要编译运行和调试.文件名为:test.c #include <stdio.h> int main() { int day, month, year, sum, leap; printf("input year month day:\n"); scanf("%d%d%d",&year,&month,&day); switch(month) { case 1: sum = 0; break; case 2: s…
在iOS开发过程中,我们用@proprety声明一个属性后,在代码中我们可以用self.xx与_xx来获取到这个属性.但是一直有一个疑惑,那就是这两个之间有什么区别呢?最初我一直觉得这两个之间没什么区别的,直到有一次,我发现自己明明对声明的属性进行了赋值,但是在使用_xx引用时发现为nil,这才引起我的注意.所以,今天在这里对这个问题进行统一的一个说明和学习. 1 @property 与 @synthesize 在说self.xx与_xx之前,我们先了解一下@property 以及 @synth…
Clang 比 GCC 编译器的优势: 编译速度更快 编译产出更小 出错提示更友 好,比如 clang 在编译过程可以直接指出相对简单的出错位置以及它 “ 认为 ” 正确的方式 . 内置有静态分析工具,可以对代码进行静态分析 (clang—analyze) .这也是 gcc 做不到的 . 专注,因为 clang 只需要完成词法和语法分析,代码优化和机器代码的生成工作由 llvm 完成.所以和全部由自己包下的 gcc 比起来, clang 可以更专注地做好一件事.这种结构也使 clang 可以被单…
命令格式:gcc [选项] [文件名] 编译的四个阶段:-E:仅执行编译预处理: -c:仅执行编译操作,不进行连接操作:-S:将C代码转换为汇编代码: -o:指定生成的输出文件. Expiain : –c是使用GNU汇编器将源文件转化为目标代码之后就结束,在这种情况下,只调用了C编译器(ccl)和汇编器(as),而连接器(ld)并没有被执行,所以输出的目标文件不会包含作为Linux程序在被装载和执行时所必须的包含信息,但它可以在以后被连接到一个程序 -c表示只编译(compile),而不连接成为…
通过一个简单的例子介绍一下gcc的__attribute__ ((constructor))属性的作用.gcc允许为函数设置__attribute__ ((constructor))和__attribute__ ((destructor))两种属性,顾名思义,就是将被修饰的函数作为构造函数或析构函数.程序员可以通过类似下面的方式为函数设置这些属性: void funcBeforeMain() __attribute__ ((constructor)); void funcAfterMain()…
GCC gcc是linux系统集成的编译器.在linux环境下编辑程序,首先需要克服的便是没有集成开发环境的一键式操作所带来的麻烦.这其中涉及命令行操作.编译选项的设定.文件依赖关系的书写(makefile)等问题.这里主要介绍的是关于gcc的常用命令行参数及其相应的作用.(若编译C++文件,则只需将下列命令的 gcc 换为 g++,源文件的后缀应为 .C/.cpp/.c++/.cc等) 基本格式:gcc [options] file1 file2... //若不加入参数,则按默认参数依次执行编…
ABI与EABI 1)ABI(Application Binary Interface for the ARM Architecture),描述了应用程序与cpu内核的低级接口. ABI允许编译好的目标代码在使用兼容ABI的系统中无改动的运行.ABI是比API更接近硬件的一层接口,可以理解为对机器码的一层接口, 不同的指令集(ISA),ABI肯定是不同的,ABI在linux中也是有规范的,称为Linux Standard Base(LSB),ELF,glibc,kernel都有相应的规定. 所以…
gcc是gnu compiler collection 的简称,他包含了多种语言的编译器,如C, C++, Objective-C, Objective-C++, Java, Fortran和Ada.但每种编译器的名字不一样,gcc and g++ 分别是 gnu 的 c & c++ 编译器 gcc/g++ 在执行编译工作的时候,总共需要 4 步 1. 预处理, 生成 .i 的文件 [ 调用预处理器 cpp] 2. 将预处理后的文件转换成汇编语言 , 生成文件 .s[ 调用编译器 gcc/egc…
导航: 1. gcc编译 2. 预处理 ----->x<------------->x<--------------->x<--------------->x<------------->x<----- 1. gcc编译         -- 1.0 预处理 gcc -E [.c --> .i ] 展开宏定义.         -- 1.1 编译 gcc -S [ .c --> .s ]         -- 1.2 汇编 gcc -…
GNU C 的一大特色就是__attribute__ 机制.__attribute__ 可以设置函数属性(Function Attribute ).变量属性(Variable Attribute )和类型属性(Type Attribute ). __attribute__ 书写特征是:__attribute__ 前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__attribute__ 参数. __attribute__ 语法格式为:__attribute__ ((attribut…