GCC
文章平均质量分 79
如小丧
这个作者很懒,什么都没留下…
展开
-
cc、gcc、g++、CC的区别概括
gcc是C编译器;g++是C++编译器;linux下cc一般是一个符号连接,指向gcc;gcc和g++都是GUN(组织)的编译器。而CC则一般是makefile里面的一个名字,即宏定义,嘿,因为Linux/Unix都是大小写敏感的系统,这点一定要注意。cc是Unix系统的C Compiler,而gcc则是GNU Compiler Collection,GNU编译器套装。gcc原名为Gun转载 2014-10-24 11:01:02 · 1216 阅读 · 0 评论 -
栈帧
首先应该明白,栈是从高地址向低地址延伸的。每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息。寄存器ebp指向当前的栈帧的底部(高地址),寄存器esp指向当前的栈帧的顶部(地址地)。下图为典型的存取器安排,观察栈在其中的位置 入栈操作:push eax; 等价于 esp=esp-4,eax->[esp];如下图出栈操作:pop eax; 等价于 [e转载 2015-11-13 01:08:32 · 614 阅读 · 1 评论 -
c语言编译预处理和条件编译执行过程的理解
在C语言的程序中可包括各种以符号#开头的编译指令,这些指令称为预处理命令。预处理命令属于C语言编译器,而不是C语言的组成部分。通过预处理命令可扩展C语言程序设计的环境。一.预处理的工作方式 1.1.预处理的功能 在集成开发环境中,编译,链接是同时完成的。其实,C语言编译器在对源代码编译之前,还需要进一步的处理:预编译。 所以,完整的步骤是:预编译 -> 编译 -> 链转载 2015-11-12 00:24:56 · 2526 阅读 · 0 评论 -
GCC编译的背后( 预处理和编译 汇编和链接 )
平时在Linux下写代码,直接用"gcc -o out in.c"就把代码编译好了,但是这后面到底做了什么事情呢?如果学习过编译原理则不难理解,一般高级语言程序编译的过程莫过于:预处理、编译、汇编、链接。gcc在后台实际上也经历了这几个过程,我们可以通过-v参数查看它的编译细节,如果想看某个具体的编译过程,则可以分别使用-E,-S,-c和 -O,对应的后台工具则分别为cpp,cc1,as,ld。下转载 2015-11-12 00:23:46 · 853 阅读 · 0 评论 -
都是类型惹的祸——小心unsigned
正如我们所知道的,编程语句都有很多的基本数据类型,如char,inf,float等等,而在C和C++中还有一个特殊的类型就是无符号数,它由unsigned修饰,如unsigned int等。大家有没想过,就是因为这些不同的类型,而使大家编写的看似非常正确的程序出现了预想不到的错误呢?一、迷惑人的有符号下无符号数的比较操作废话不多说,马上来看一下例子,让你先来体验一下这个奇妙的旅程,转载 2015-11-06 00:58:02 · 640 阅读 · 0 评论 -
Linux内核导出符号宏定义EXPORT_SYMBOL的源码分析
源代码:…….#ifndef MODULE_SYMBOL_PREFIX#define MODULE_SYMBOL_PREFIX ""#endif…….struct kernel_symbol //内核符号结构{ unsignedlong value; //该符号在内存地址中的地址转载 2015-07-11 10:43:22 · 386 阅读 · 0 评论 -
交叉编译器 arm-linux-gnueabi 和 arm-linux-gnueabihf 的区别
一. 什么是ABI和EABI1) ABI: 二进制应用程序接口(Application Binary Interface (ABI) for the ARM Architecture)在计算机中,应用二进制接口描述了应用程序(或者其他类型)和操作系统之间或其他应用程序的低级接口.ABI涵盖了各种细节,如:数据类型的大小、布局和对齐;调用约定(控制着函数的参数如何传送以及如何接受转载 2015-01-19 18:55:10 · 445 阅读 · 0 评论 -
你的变量究竟存储在什么地方?
你的变量究竟存储在什么地方?作者:杨小华 我相信大家都有过这样的经历,在面试过程中,考官通常会给你一道题目,然后问你某个变量存储在什么地方,在内存中是如何存储的等等一系列问题。不仅仅是在面试中,学校里面的考试也会碰到同样的问题。 如果你还不知道答案,请接着往下看。接下来,我们将在Linux操作系统上,以GCC编译器为例来讲解变量的存储。转载 2014-10-19 15:39:44 · 444 阅读 · 0 评论 -
C 编译、链接、加载
一、概述C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织形成最终生成可加载、可执行代码的过程。过程图解如下: 预处理器:将.c 文件转化成 .i文件,使用的gcc命令是:g转载 2014-10-19 13:01:40 · 506 阅读 · 0 评论 -
Linux下动态库so的生成与使用
http://blog.sina.com.cn/s/blog_7769660f01011pf1.html一. 编写个C文件:test.c [cpp] view plaincopyprint?#include // file test.c int say() { printf("Hello, Linux转载 2014-10-04 14:20:35 · 933 阅读 · 0 评论 -
C语言的inline关键字
一直以来我就认为inline关键字是C++中的。今天我看到一篇讲关于C语言的inline关键字的。呵呵。。。原来是我弄错了。看来以后定义一些宏命令完全可以用这样的一些inline函数来代替了。以下是我从网上搜集来的知识点(来源:http://superding.spaces.live.com/Blog/cns!89E842A8485366C7!1137.entry)转载 2014-10-15 16:17:16 · 484 阅读 · 0 评论 -
GCC笔记
转自:http://www.cnblogs.com/chio/archive/2007/10/15/925391.htmlThe History of GCC 1984年,Richard Stallman发起了自由软件运动,GNU (Gnu's Not Unix)项目应运而生,3年后,最初版的GCC横空出世,成为第一款可移植、可优化、支持ANSI C的开源C编译器。转载 2014-10-04 12:27:01 · 381 阅读 · 0 评论 -
gnu binutils使用方法指南
GNU binutils是一组二进制工具集,包括:ar nm objcopy objdump gprof ld ranlib size strings strip addr2line。下面将对它们的用法做一个简单的介绍。1、 arar用于建立、修改、提取档案文件(archive)。archive是一个包含多个被包含文件的单一文件(也称之为库文件),其结构保证了可以从中检索转载 2014-10-04 12:30:24 · 1968 阅读 · 0 评论 -
gcc 内嵌汇编用法
内核代码绝大部分使用C语言编写,只有一小部分使用汇编语言编写,例如与特定体系结构相关的代码和对性能影响很大的代码。GCC提供了内嵌汇编的功能,可以在C代码中直接内嵌汇编语言语句,大大方便了程序设计。简单的内嵌汇编很容易理解例:__asm____volatile__("hlt");“__asm__”表示后面的代码为内嵌汇编,“asm”是“__asm__”的别名。转载 2014-10-10 17:01:56 · 355 阅读 · 0 评论 -
小例子一步一步解释“函数调用过程中栈的变化过程”
1 问题描述 在此之前,我对C中函数调用过程中栈的变化,仅限于了解有好几种参数的入栈顺序,其中的按照形参逆序入栈是比较常见的,也仅限于了解到这个程度,但到底在一个函数A里面,调用另一个函数B的过程中,函数A的栈是怎么变化的,实参是怎么传给函数B的,函数B又是怎么给函数A返回值的,这些问题都不能很明白的一步一步解释出来。下面,便是用一个小例子来解释这个过程,主要回答的问题是如下几个: 1转载 2015-11-13 01:07:22 · 917 阅读 · 0 评论