运行时文件:(在tmath程序下实验)
在编译过程中使用 -v :这个参数的意思是将这个编译链接的过程中产生的信息输出到显示器,可以单独显示编译或链接
命令:tarena@ubuntu:~/day/day23/tmath$ gcc *.o -v
结果:
************************* 这里的暂时不用看 ****************************************************
使用内建 specs。
目标:i686-linux-gnu
配置为:../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.4.7-1ubuntu2' --with-bugurl=file:
线程模型:posix
gcc 版本 4.4.7 (Ubuntu/Linaro 4.4.7-1ubuntu2)
COMPILER_PATH=/usr/lib/gcc/i686-linux-gnu/4.4.7/:/usr/lib/gcc/i686-linux-gnu/4.4.7/:/usr/lib/gcc/i686-linux-gnu/:/usr/lib/gcc/i686-linux-gnu/4.4.7/:/usr/lib/gcc/i686-linux-gnu/:/usr/lib/gcc/i686-linux-gnu/4.4.7/:/usr/lib/gcc/i686-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/i686-linux-gnu/4.4.7/:/usr/lib/gcc/i686-linux-gnu/4.4.7/:/usr/lib/gcc/i686-linux-gnu/4.4.7/../../../i386-linux-gnu/:/usr/lib/gcc/i686-linux-gnu/4.4.7/../../../../lib/:/lib/i386-linux-gnu/:/lib/../lib/:/usr/lib/i386-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/i686-linux-gnu/4.4.7/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-mtune=generic' '-march=i686'
***********************************************************************************************
(-L后面的是路径,.o文件这些是在链接时需要和自己编写的文件一起链接的文件)
/usr/lib/gcc/i686-linux-gnu/4.4.7/collect2 --build-id --eh-frame-hdr -m elf_i386 --hash-style=gnu -dynamic-linker /lib/ld-linux.so.2 -z relro
/usr/lib/gcc/i686-linux-gnu/4.4.7/../../../i386-linux-gnu/crt1.o
/usr/lib/gcc/i686-linux-gnu/4.4.7/../../../i386-linux-gnu/crti.o
/usr/lib/gcc/i686-linux-gnu/4.4.7/crtbegin.o
-L/usr/lib/gcc/i686-linux-gnu/4.4.7
-L/usr/lib/gcc/i686-linux-gnu/4.4.7
-L/usr/lib/gcc/i686-linux-gnu/4.4.7/../../../i386-linux-gnu
-L/usr/lib/gcc/i686-linux-gnu/4.4.7/../../../../lib
-L/lib/i386-linux-gnu -L/lib/../lib
-L/usr/lib/i386-linux-gnu -L/usr/lib/../lib
-L/usr/lib/gcc/i686-linux-gnu/4.4.7/../../.. t_add.o t_math.o t_sul.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed
/usr/lib/gcc/i686-linux-gnu/4.4.7/crtend.o
/usr/lib/gcc/i686-linux-gnu/4.4.7/../../../i386-linux-gnu/crtn.o
(上面的.o文件是一些运行时的文件,在链接的时候系统将这写.o文件和自己编的链接在一起)
tarena@ubuntu:~/day/day23/tmath$ --with-bugurl=file:
让我们察看一个”运行时的文件“:/usr/lib/gcc/i686-linux-gnu/4.4.7/../../../i386-linux-gnu/crt1.o
命令:tarena@ubuntu:~/day/day23/tmath$ nm /usr/lib/gcc/i686-linux-gnu/4.4.7/../../../i386-linux-gnu/crt1.o
结果:
00000000 R _IO_stdin_used
00000000 D __data_start
U __libc_csu_fini
U __libc_csu_init
U __libc_start_main
00000000 R _fp_hw
00000000 T _start
00000000 W data_start
U main
分析:这个结果说明程序的入口并不是main,而是start,在C语言中main是入口
补充:
_start在汇编中是一个标号,定义了程序的入口,即程序从这里开始执行
c程序在预处理之后会进行编译为汇编,汇编后成为机器语言