目录
[1.rwx 对于目录和文件的区别](#1.rwx 对于目录和文件的区别)
[2.gcc 编译器](#2.gcc 编译器)
[2.2gcc 的其他参数](#2.2gcc 的其他参数)
1.rwx 对于目录和文件的区别
r 文件的内容可以被查看。支持cat、more、head...vim ;目录的内容可以被查看。ls、tree
w 文件的内容可以被添加、修改、删除。vim > >> ;目录的内容(目录项)可以被添加、修改、删除。rm、touch、mv、cp... |
x 可执行、可运行。(可执行程序、脚本);该目录可以被进入。 cd
2.gcc 编译器
2.1编译过程
- 预处理: 预处理器
-
将 源文件,展开 头文件、替换宏(变量宏、函数宏)、替换 空行、空格、table、注释
-
gcc -E hello.c -o hello.i
-
-E: 预处理选项
-
-o:重命名。
- 编译:编译器
-
逐行检查程序中出现的 语法和词法 错误!简单的逻辑错误。------ **==所有编译过程中,最耗时==**
-
gcc -S hello.i -o hello.s
-
-S: 编译选项,如果编译无误,生成 .s 汇编文件。
- 汇编:汇编器。
-
将 .s 汇编 文件中,的所有汇编指令,翻译成二进制机器码。
-
gcc -c hello.s -o hello.o
-
-c: 汇编选项。 无错误检查。机械翻译。
- 链接:连接器。-- ld --
-
将 .o 的目标文件,链接库文件、数据段合并,地址回填。生成可执行文件。
-
gcc hello.o -o hello
-
此过程无专用参数。 -o 不是连接过程必须使用的参数
2.2gcc 的其他参数
-
-c:只生成目标文件(过程包含:预处理、编译、汇编)
-
-v:查看gcc版本
-
**-I(大i): 指定 头文件所在目录位置。**
-
**-L:指定库文件所在目录位置。**
-
**-l(小L):指定库名。( 去掉前缀lib 和 后缀 .so 或 .a )**
-
-g: 使用gdb调试前,编译程序添加! 加-g编译的可执行文件,带有调试表。给gdb提供调试环境。
-
-Wall:显示所有的 警告信息。
-
-D:在编译期间动态的向程序中,注册变量宏。
-
例:gcc -o test test.c -D MAX=10
3.动态库和静态库
3.1函数库
-
本质:一组函数。具有相近的功能或操作同一数据结构。
-
<string.h> : strcpy/strcmp/strcat/strlen/strstr/strchr/strtok ....
-
自定义库:<mysort.h> : bubble_sort / select_sort/ quick_sort / insert_sort ....
-
作用:
-
代码复用。
-
程序积累。
- 发布形式:
- 源码形式:
-
优点:方便使用者学习和使用。
-
缺点:1. 保密性差。2. 编译程序耗时。3. 编译受平台、版本限制。
- 二进制形式:
-
优点、缺点,与上述相反。
-
我们使用的函数: 标准C库:/lib/x86_64-linux-gnu/libc.so.6