linux – GCC详细模式输出说明
发布时间:2021-01-17 15:41:47 所属栏目:Linux 来源:互联网
导读:我是 linux的新手.任何人可以向我解释我的hello world程序的以下详细模式输出?此外,文件crt1.o,crti.o,crtend.o,crtbegin.o和crtn.o和lc和lgcc会做什么?任何其他解释性的联系也是欢迎的. $gcc -v hello.cReading specs from /usr/lib/gcc-lib/i686/3.3.1/sp
我是 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函数.另外还有一些. 希望有帮助. (编辑:甘南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- How to allow/block PING on Linux server – IPTables rul
- linux – 获取Xorg内部活动客户端的完整列表
- linux-kernel – 是否有可用的内核工具以合理的准确度测量中
- LINUX实操:Linux文件排序工具 sort 命令详解
- Axel - Linux多线程下载工具
- linux – RHEL7 – /usr/lib64 / libstdc .so.6:版本“CXX
- linux – 在环境变量中的波浪扩展
- Linux删除行中字符后的空格
- linux – 在ARM上构建mongo shell 3.2.x(armv7l / arm64 /
- gdb – 我有一个没有使用调试符号构建的可执行文件的核心转