1.背景知识
1.预处理(进行宏替换)
2.编译(生成汇编)
3.汇编(生成机器可识别代码)
4.链接(生成可执行文件或库文件)
2.gcc如何完成
1.预处理(进行宏替换)
gcc -E hello.c -o hello.i
2.编译(生成汇编)
gcc -S hello.i -o hello.s
3.汇编(生成机器可识别代码)
gcc -c hello.s -o hello.o
4.链接(生成可执行文件或库文件)
gcc hello.o -o hello
3 .基本命令
[sxc_1@hcss-ecs-babb ~]$ ll
total 8
drwxrwxr-x 6 sxc_1 sxc_1 4096 Aug 26 14:42 106
-rw-rw-r-- 1 sxc_1 sxc_1 827 Aug 9 19:33 install.sh
[sxc_1@hcss-ecs-babb ~]$ cd 106
[sxc_1@hcss-ecs-babb 106]$ ll
total 16
drwxrwxr-x 2 sxc_1 sxc_1 4096 Jul 28 13:56 lesson5
drwxrwxr-x 2 sxc_1 sxc_1 4096 Aug 9 19:31 lesson7
drwxrwxr-x 2 sxc_1 sxc_1 4096 Aug 21 12:53 lesson8
drwxrwxr-x 2 sxc_1 sxc_1 4096 Aug 26 15:01 lesson9
[sxc_1@hcss-ecs-babb 106]$ cd lesson9
[sxc_1@hcss-ecs-babb lesson9]$ ll
total 40
-rwxrwxr-x 1 sxc_1 sxc_1 8360 Aug 26 15:01 mytest
-rw-rw-r-- 1 sxc_1 sxc_1 292 Aug 26 14:45 test1.c
-rw-rw-r-- 1 sxc_1 sxc_1 83 Aug 26 14:44 test.c
-rw-rw-r-- 1 sxc_1 sxc_1 16881 Aug 26 14:54 test.i
[sxc_1@hcss-ecs-babb lesson9]$ ./mytest
hello Makefile!
mytest是通过gcc编译出来的文件,查看mytest的命令是:./mytest
[sxc_1@hcss-ecs-babb lesson9]$ file mytest
mytest: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=fc0866a869c7fc36d511b2b5c3833034d4738738, not stripped
file + 文件名 可以查看文件的相关信息。
[sxc_1@hcss-ecs-babb lesson9]$ ldd mytest
linux-vdso.so.1 => (0x00007fff9f582000)
libc.so.6 => /lib64/libc.so.6 (0x00007f95fb2d6000)
/lib64/ld-linux-x86-64.so.2 (0x00007f95fb6a4000)
ldd + 文件名可以查看该文件相关的动态库。
[sxc_1@hcss-ecs-babb lesson9]$ vim test1.c
[sxc_1@hcss-ecs-babb lesson9]$ make
gcc test1.c -o mytest1
[sxc_1@hcss-ecs-babb lesson9]$ ./mytest
hello Makefile!
:[sxc_1@hcss-ecs-babb lesson9]$ ./mytest1
Hello world[sxc_1@hcss-ecs-babb lesson9]$
Hello world[sxc_1@hcss-ecs-babb lesson9]$ make clean
rm -f mytest1
使用make实例。使用命令是:make;清理命令是:clean;
makefile文件里要写的内容。