编译学习-知识点零碎01

一.流程
.c–预编译–>.i(中间文件intermediate)–编译–>.s(assembly汇编语言文件)–汇编–>.o(object目标文件)–链接–>.elf/.exe/.out文件
在这里插入图片描述
注:汇编语言:MOV ,ADD 等

二…c文件与.h文件
头文件放函数、宏等声明,告诉别人怎么调用你的函数;
.c文件放函数实体和变量声明

说白了搞一个.h文件就是方便别的文件调用你这个.c文件里面的函数

为了防止编译时重复编译某函数或者让某函数或变量多次出现,故将函数声明和函数实体、变量声明和变量定义等分开放

三.Linux 语言

编译默认是.c–>.o,只有在加上-o命令时, -o hello.out 才会编译和链接一起执行,编译生成的是目标文件,链接生成可执行文件
gcc -c 生成目标文件。若指定文件为.c,则①预编译②编译③汇编至.o
若指定文件为.i,则①编译②汇编至.o
若指定文件为.s,则①汇编至.o
gcc -S 执行文件至生成汇编语言文件 .s
gcc -E 预编译,一般需要指定生成的.i文件
gcc -o 输出指定名字

可直接执行gcc [file] -0 [.out] ,编译器自动识别文件为啥文件并输出可执行文件

GCC -o选项使用举例
1) 将源文件作为输入文件,将可执行文件作为输出文件,也即完整地编译整个程序:
$ gcc main.c func.c -o app.out

将 main.c 和 func.c 两个源文件编译成一个可执行文件,其名字为 app.out。如果不使用 -o 选项,那么将生成名字为 a.out 的可执行文件。

2) 将源文件作为输入文件,将目标文件作为输出文件,也即只编译不链接:
$ gcc -c main.c -o a.o

将源文件 main.c 编译为目标文件 a.o。如果不使用 -o 选项,那么将生成名为 main.o 的目标文件。

3) 将源文件作为输入文件,将预处理文件作为输出文件,也即只进行预处理操作:
$ gcc -E main.c -o demo.i

对源文件 main.c 进行预处理操作,并将结果放在 demo.i 文件中。如果不使用 -o 选项,那么将生成名为 main.i 的预处理文件。

4) 将目标文件作为输入文件,将可执行文件作为输出文件:
$ gcc -c func.c main.c
$ gcc func.o main.o -o app.out

第一条命令只编译不链接,将生成 func.o 和 main.o 两个目标文件。第二条命令将生成的两个目标文件生成最终的可执行文件 app.out。如果不使用 -o 选项,那么将生成名字为 a.out 的可执行文件。

echo 打印
touch file 生成file,或者修改file时间戳

四.编译
将头文件的声明包含进来,声明函数的实现在链接中完成。
makefile中需要说明要链接哪个.o文件,连接器找到该函数后,把他们build到makefile指定的可执行的文件中。

五.链接
动态链接:GCC编译时的默认选项。动态是指在应用程序运行时才去加载外部的代码库,不同的程序可以共用代码库。 所以动态链接生成的程序比较小,占用较少的内存。
静态链接:链接时使用选项 “–static”,它在编译阶段就会把所有用到的库打包到自己的可执行程序中。 所以静态链接的优点是具有较好的兼容性,不依赖外部环境,但是生成的程序比较大。

六.库,平台,架构,框架之间的区别
(转发自知乎大佬)
库是工具箱,比如我用螺丝刀还是电动螺丝刀,就是看哪个更顺手、
框架就是架子,比如只能放书不能睡觉,规定好在什么地方做什么事情,不好僭越。
架构,类似房型图
平台,把你可能要做的事情都想好了,比如小区里有公园,有健身器材,等等。

linux cp,如果要cp一个Home下其他账户的文件,需要到Home这一层复制(at least 俺只会这个)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值