Linux下gcc、objdump、file命令使用方式总结

一、GCC编译器和常用命令

gcc编译器不仅支持c语言,还支持Ada、C++、Objective-C语言。一般编译的过程可以分为四个阶段:预处理(Preprocessing)、编译(Compilation)、汇编(Assembly)和连接(Linking)

1、  一步到位的编译指令

包含四个阶段

gcc test.c –o test

2、  预处理

将头文件内容插入到test.c文件,-E是预处理结束后停止,并输出预处理结果

gcc –E test.c –o test.i

3、  编译

对.i文件编译,生成汇编代码,-S表示生成汇编代码后停止,-o输出汇编代码文件

gcc –S test.i –o test.s

4、  汇编

将汇编代码文件编译为目标文件

gcc –c test.s –o test.o

5、  连接

将其与C标准输入输出库进行连接,最终生成程序test

gcc test.o –o test

6、  执行

在命令行窗口,执行./test

不同文件代表的意义:

test.c(源文件)->test.i(-E预处理后文件)->test.s(-S汇编文件)->test.o(-c目标文件)->test(-o可执行文件)

对于多个源文件进行编译:

1、  一步到位

gcc  test1.c  test2.c –o test

2、  复杂一些的(执行过程和一步到位的是一样的,都是预处理->编译->连接)

gcc -c test1.c -o test1.o

gcc -c test2.c -o test2.o

gcc test1.o test2.o -o test

常用命令选项的意义:

1、-c 只编译不连接

2、-O 优化编译后的代码,后面加数字代表优化级别

3、-o 指定输出的文件名

4、-v 显示编译过程中每一步用到的命令

二、objdump命令的使用

objdump是Linux下面的反汇编目标文件或者可执行文件的命令

1、objdump –d test

反悔表test中需要执行指令的那些section

2、  objdump –h test

显示test的Section Header信息

3、  objdump –S test.o

输出C源代码和反汇编出来的指令对照的格式

4、  objdump –h

显示目标文件各个section的头部摘要信息

5、  objdump –r

显示文件的重定位入口

6、  objdump –t显示文件的符号表入口

三、file命令

file命令是检测文件类型的命令,可以读取文件的编码体系以及一些其他信息

时间: 2024-11-03 22:07:39

Linux下gcc、objdump、file命令使用方式总结的相关文章

【转】Linux下软件安装的几种方式

转自Linux下软件安装的几种方式 Linux 软件安装到哪里合适,目录详解 Linux 的软件安装目录是也是有讲究的,理解这一点,在对系统管理是有益的 /usr:系统级的目录,可以理解为              C:/Windows/, /usr/lib理解为                                       C:/Windows/System32. /usr/bin:几乎所有的系统可执行文件都会安装在这里 /usr/local/bin:则是可以存放一些系统用户自己

Linux下gcc编译生成动态链接库*.so文件并调用它

动态库*.so在linux下用c和c++编程时经常会碰到,最近在网站找了几篇文章介绍动态库的编译和链接,总算搞懂了这个之前一直不太了解得东东,这里做个笔记,也为其它正为动态库链接库而苦恼的兄弟们提供一点帮助.1.动态库的编译 下面通过一个例子来介绍如何生成一个动态库.这里有一个头文件:so_test.h,三个.c文件:test_a.c.test_b.c.test_c.c,我们将这几个文件编译成一个动态库:libtest.so. //so_test.h:#include "stdio.h"

Linux下gcc编译生成动态链接库*.so文件并调用它 是转载的

动态库*.so在linux下用c和c++编程时经常会碰到,最近在网站找了几篇文章介绍动态库的编译和链接,总算搞懂了这个之前一直不太了解得东东,这里做个笔记,也为其它正为动态库链接库而苦恼的兄弟们提供一点帮助.1.动态库的编译 下面通过一个例子来介绍如何生成一个动态库.这里有一个头文件:so_test.h,三个.c文件:test_a.c.test_b.c.test_c.c,我们将这几个文件编译成一个动态库:libtest.so. //so_test.h:#include "stdio.h"

【转】Linux下gcc编译生成动态链接库*.so文件并调用它

http://blog.sina.com.cn/s/blog_54f82cc20101153x.html 动态库*.so在linux下用c和c++编程时经常会碰到,最近在网站找了几篇文章介绍动态库的编译和链接,总算搞懂了这个之前一直不太了解得东东,这里做个笔记,也为其它正为动态库链接库而苦恼的兄弟们提供一点帮助.1.动态库的编译 下面通过一个例子来介绍如何生成一个动态库.这里有一个头文件:so_test.h,三个.c文件:test_a.c.test_b.c.test_c.c,我们将这几个文件编译

Linux下gcc编译生成动态链接库*.so文件并调用它【转载】

动态库*.so在linux下用c和c++编程时经常会碰到,最近在网站找了几篇文章介绍动态库的编译和链接,总算搞懂了这个之前一直不太了解得东东,这里做个笔记,也为其它正为动态库链接库而苦恼的兄弟们提供一点帮助. 1.动态库的编译 下面通过一个例子来介绍如何生成一个动态库.这里有一个头文件:so_test.h,三个.c文件:test_a.c.test_b.c.test_c.c,我们将这几个文件编译成一个动态库:libtest.so. //so_test.h: #include "stdio.h&qu

linux下gcc升级

由于最近公司老大安排对gcc进行升级,所以就整理下这篇文档,希望对有些盆友有些许帮助 1 安装gmp4.3.2 tar jxvf gmp-4.3.2.tar.bz2 mkdir /usr/local/gmp-4.3.2 cd /usr/local/gmp-4.3.2 /opt/gmp-4.3.2/configure --prefix=/usr/local/gmp-4.3.2 make  && make install 2 安装mpfr2.4.2 tar jxvf mpfr2.4.2.tar

实现Linux下的ls -l命令

基本实现了Linux下的ls -l命令,对于不同的文件显示不同的颜色和显示符号链接暂时没有实现: 1 /************************************************************************* 2 > File Name: dirwalk.c 3 > Author: 4 > Mail: 5 > Created Time: Tue 31 Mar 2015 11:56:38 AM CST 6 ******************

Linux下的目录创建命令使用实践

[文章摘要] 本文以实际的C源程序为例子,介绍了Linux下的目录创建命令(mkdir)的使用方法,为相关开发工作的开展提供了有益的参考. [关键词] C语言  Linux  目录创建  makefile  开发 一.mkdir命令简介 mkdir命令用来创建指定名称的目录,其命令格式为:mkdir [选项] 目录... 其中,[选项]可以是"-m"."-p"或"-v".此外,目录名是区分大小写的. 二.本程序流程 本文中的程序用于实现创建目录的

基于嵌入式Linux下GCC编译器__sync_sub_and_fetch_4错误的解决心得

******************************************************************************************************************************************************* 作者:EasyWave                                                                                      

二十七、Linux下常用的shell命令记录

本文章记录我在linux系统下常用或有用的系统级命令,包括软硬件查看.修改命令,有CPU.内存.硬盘.网络.系统管理等命令.但本文不打算介绍生僻命令,也不介绍各个linux发行版下的特有命令,且以后会持续更新. 说明,我是在一个Centos 6.4 64位的虚拟机系统进行测试.本文介绍的命令都会在此Centos下运行验证(也有部分命令会在我的suse/ubuntu系统里测试的,会做特明说明),但运行结果就不再列出了. 硬件篇 CPU相关 lscpu #查看的是cpu的统计信息. cat /pro