我是

Linux的新手.任何人可以向我解释我的hello world程序的以下详细模式输出?此外,文件crt1.o,crti.o,crtend.o,crtbegin.o和crtn.o和lc和lgcc会做什么?任何其他解释性的联系也是欢迎的.

$gcc -v hello.c

Reading specs from /usr/lib/gcc-lib/i686/3.3.1/specs

Configured with: ../configure --prefix=/usr

Thread model: posix

gcc version 3.3.1

/usr/lib/gcc-lib/i686/3.3.1/cc1 -quiet -v -D__GNUC__=3

-D__GNUC_MINOR__=3 -D__GNUC_PATCHLEVEL__=1

hello.c -quiet -dumpbase hello.c -auxbase hello -Wall

-version -o /tmp/cceCee26.s

GNU C version 3.3.1 (i686-pc-Linux-gnu)

compiled by GNU C version 3.3.1 (i686-pc-Linux-gnu)

GGC heuristics: --param ggc-min-expand=51

--param ggc-min-heapsize=40036

ignoring nonexistent directory "/usr/i686/include"

#include "..." search starts here:

#include <...> search starts here:

/usr/local/include

/usr/include

/usr/lib/gcc-lib/i686/3.3.1/include

/usr/include

End of search list.

as -V -Qy -o /tmp/ccQynbTm.o /tmp/cceCee26.s

GNU assembler version 2.12.90.0.1 (i386-Linux)

using BFD version 2.12.90.0.1 20020307 Debian/GNU

Linux

/usr/lib/gcc-lib/i686/3.3.1/collect2

--eh-frame-hdr -m elf_i386 -dynamic-linker

/lib/ld-Linux.so.2 /usr/lib/crt1.o /usr/lib/crti.o

/usr/lib/gcc-lib/i686/3.3.1/crtbegin.o

-L/usr/lib/gcc-lib/i686/3.3.1

-L/usr/lib/gcc-lib/i686/3.3.1/../../.. /tmp/ccQynbTm.o

-lgcc -lgcc_eh -lc -lgcc -lgcc_eh

/usr/lib/gcc-lib/i686/3.3.1/crtend.o

/usr/lib/crtn.o

第一部分是编译器驱动程序的版本和配置数据(这是gcc二进制文件,实际上并不是编译器本身):

Reading specs from /usr/lib/gcc-lib/i686/3.3.1/specs

Configured with: ../configure --prefix=/usr

Thread model: posix

gcc version 3.3.1

然后它打印它用来调用真正的编译器的命令cc1:

/usr/lib/gcc-lib/i686/3.3.1/cc1 -quiet -v -D__GNUC__=3

-D__GNUC_MINOR__=3 -D__GNUC_PATCHLEVEL__=1

hello.c -quiet -dumpbase hello.c -auxbase hello -Wall

-version -o /tmp/cceCee26.s

而cc1打印它的版本和配置信息.

GNU C version 3.3.1 (i686-pc-Linux-gnu)

compiled by GNU C version 3.3.1 (i686-pc-Linux-gnu)

GGC heuristics: --param ggc-min-expand=51

--param ggc-min-heapsize=40036

那么cc1会告诉你将搜索包含文件的目录.

ignoring nonexistent directory "/usr/i686/include"

#include "..." search starts here:

#include <...> search starts here:

/usr/local/include

/usr/include

/usr/lib/gcc-lib/i686/3.3.1/include

/usr/include

End of search list.

编译器现在完成了,所以gcc告诉你将使用的汇编器命令.

as -V -Qy -o /tmp/ccQynbTm.o /tmp/cceCee26.s

而汇编程序就给出了它的版本信息.

GNU assembler version 2.12.90.0.1 (i386-Linux)

using BFD version 2.12.90.0.1 20020307 Debian/GNU

Linux

汇编器现在完成,所以gcc给出了链接器命令.它使用collect2作为真正的链接器ld的中介,但这并不重要.

/usr/lib/gcc-lib/i686/3.3.1/collect2

--eh-frame-hdr -m elf_i386 -dynamic-linker

/lib/ld-Linux.so.2 /usr/lib/crt1.o /usr/lib/crti.o

/usr/lib/gcc-lib/i686/3.3.1/crtbegin.o

-L/usr/lib/gcc-lib/i686/3.3.1

-L/usr/lib/gcc-lib/i686/3.3.1/../../.. /tmp/ccQynbTm.o

-lgcc -lgcc_eh -lc -lgcc -lgcc_eh

/usr/lib/gcc-lib/i686/3.3.1/crtend.o

/usr/lib/crtn.o

链接器不提供详细的输出(尝试-Wl,-v),就是这样.

“crt”文件是指“C RunTime”.它们是在程序开始时插入的小部分代码,最后一节.他们负责初始化全局变量,堆和堆栈.从main返回后,它们调用atexit函数.另外还有一些.

希望有帮助.

linux gcc编译模式,在Linux中GCC详细模式输出说明相关推荐

  1. linux 保存编译log,(转)Linux下编译安装log4cxx

    一个项目的服务器端在Linux平台下,用到了开源日志库log4cxx,这个库是apache项目的一个子库.功能很不错.下面记录下它的编译和安装过程. 第一步安装apr-1.3.8,顺序不能错,它必须首 ...

  2. 用gcc编译实现对Linux系统cpu占用

    目标:使用gcc编译代码使得占用系统的cpu. 1.确定是否安装gcc编译 2.vi att.c 文件代码如下: a的数值可自己调控,for循环(;;)代表死循环,在for中运行竟可能复杂的代码,让机 ...

  3. 【GCC】gcc警告选项汇总--编辑中|gcc编译选项

    目录 前言 请求或取消警告选项 GCC编译选项 参考原文:https://blog.csdn.net/qq_17308321/article/details/79979514 前言 警告:不是错误的, ...

  4. linux 内核编译不能打字,linux系统升级后,手动编译的kernel无法启动问题

    linux系统升级后,手动编译的kernel无法启动问题 linux系统升级后,手动编译的kernel无法启动问题 做开发相关,需要编译3.18的kernel,x86_64的,但是我的deepin升级 ...

  5. linux 线程编译指令i,linux线程篇之(一):线程的创建与应用

    #include#include void thread1(void)//线程1 { int i=0; for(i=0;i<6;i++) { printf("this is a pth ...

  6. linux下编译ts工程,linux下搭建生成HLS所需的.ts和.m3u8文件

    要想利用HLS来实现视频的在线播放,就得需要将一个完整的视频文件切割成多个ts视频流,然后利用m3u8的索引文件来播放. 在Mac下,苹果提供了streamingTools的工具,里面有mediafi ...

  7. linux 上编译arm64,Arch Linux 搭建 arm64/AArch64 交叉编译环境

    Arch Linux 搭建 arm64/AArch64 交叉编译环境 0. 系统环境 系统: Arch Linux: 成文时间最新 工具版本:Binutils:2.34-1 GCC:9.2.1+202 ...

  8. linux 模块化编译,手把手教Linux驱动1-模块化编程 module

    大家好,从本篇起,一口君将手把手教大家如何来学习Linux驱动,预计会有20篇关于驱动初级部分知识点.本专题会一直更新,有任何疑问,可以留言或者加我微信. Linux的开发者,遍布世界各地,他们相互之 ...

  9. linux emule 编译 wx-config --libs,linux下编译wxwidgets所写程序所遇到的问题

    记录linux下编译wxwidgets所遇到的问题 1./home/hrd/baohualib/wxWidgets-3.0.2/include/wx/platform.h:184:22: 致命错误: ...

  10. linux make编译卡死,为linux内核编译make文件时出现问题?

    我刚刚开始使用Linux内核开发,并且遇到了编译make文件的问题.为linux内核编译make文件时出现问题? 这是hello世界的教程. 我的HELLO-1.C文件 * * hello−1.c − ...

最新文章

  1. Hibernate一对多单向关联和双向关联映射方法及其优缺点
  2. 中国计算机学会CCF推荐国际学术会议和期刊目录-软件工程/系统软件/程序设计语言
  3. [今日干货]短视频获得种子用户的途径
  4. 2.3.4 mysql 用户密码管理
  5. 如何处理错误消息Please install the Linux kernel header files
  6. 【第四周作业】参加项目开发之后的一些体会
  7. OpenJPA:内存泄漏案例研究
  8. 流媒体测试笔记记录之————阿里云监控、OBS、FFmpeg拉流和推流变化比较记录...
  9. python123第四章第五题_Python123
  10. Java实现求阶乘和的三种方法
  11. C语言找n以上最小质数,[原创]求质数(C语言描述)
  12. 双稳态电路的两个稳定状态是什么_干货|常见的脉冲电路到底有何用途和特点?终于了解了!...
  13. 笔记本扩展显示器,微信界面显示字体模糊如何解决?
  14. WIN API编程的详细介绍
  15. JAVA商城 B2B2C商城系统 多用户商城系统 直播带货 新零售商城 o2o商城 电子商务 拼团商城 分销商城 直播商城 短视频商城 springcloud商城 spring cloud商城
  16. 小米Note4、小米8、一加6刷机(三方rec+rom+root)
  17. C++入门——神奇的引用
  18. Spine动画导入报错 : Could not automatically set the AtlasAsset for “xx“.you may set it manually
  19. Hadoop起源简介
  20. win10开机桌面壁纸位置

热门文章

  1. iOS开发——源代码管理——git(分布式版本控制和集中式版本控制对比,git和SVN对比,git常用指令,搭建GitHub远程仓库,搭建oschina远程仓库 )...
  2. hdu 1596 概率dijstra
  3. 北大学子求职经历与建议(IT类) 收藏
  4. spring security执行原理流程
  5. Dynamics CRM 2013 初体验(5):Business Rule
  6. gitbook 配置
  7. 暑期实习面试——超对称,算法实习生
  8. 药品缺陷检测中的机器视觉技术
  9. 开源,想说爱你不容易
  10. centos绑定多个ip CentOS一个网卡设置多个IP