ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Linux中的编辑器

2026/10/7 11:28:03 拓冰建站 浏览量
Linux中的编辑器 由于我选择的是C因此我选择的Linux的编辑器为gcc/g。其中gcc我们用来编译C语言g用来编译C由于C兼容C我们虽然可以用g来编译c但我们一般不会这么做在C语言中我们知道我们的文件要想被执行需要编译和链接其中编译又分为预处理、编译和汇编。预处理主要的工作是宏替换、去掉注释等我们可以使用如下指令使编译器gcc将它的工作只做第一段预处理gcc -E test.c -o test.i-E会让gcc预处理完后停止编译-o指目标文件预处理后的文件常用后缀.i编译将预处理后的文件翻译成汇编代码在翻译之前还会检查语法等。gcc -S test.i -o test.s-E会让gcc编译完后停止汇编会将编译后的文件转成可执行文件gcc -c test.s -o test.o-c会让gcc汇编完后停止链接将可执行文件链接链接后机器才可以执行不然会不完整编译器无法执行gcc test.o -o test编译器自举在此扩展两个问题先有语言还是先有编译器先有汇编语言还是先有汇编编译器想明白这两个问题就明白什么是编译器自举了指令集指令集就是CPU 能看懂的全部命令清单是 CPU 和软件之间的接口。我们所写的高级语言计算机是看不懂的都是先翻译成汇编语言再翻译成二进制语言。翻译出来的二进制语言是有章法的由编译器能读懂的指令集中的指令组成如果不在指令集中的指令编译器就看不懂了这一部分我们了解即可这是编译器的任务。动静态库理解入门我们所写的C语言代码编译工作完成了但没有链接它是无法执行的比如printf函数我们没有实现机器怎么执行此函数。因此我们需要链接动静态库在介绍动静态库之前我们先了解什么是动静态链接静态链接是在编译时就将需要的文件就链接起来从而形成可执行程序。它有两个致命的缺点1、内存空间较大因为每个可执行程序中对所有需要的目标文件都要有⼀份副本所以如果多个程序对同⼀个目标文件都有依赖如多个程序中都调用了printf()函数则这多个程序中都含有 printf.o所以同⼀个目标文件都在内存存在多个副本2、更新较困难每当库函数的代码修改了这个时候就需要重新进行编译链接形成可执行程序这是相对于动态链接而言。但就是因为它的特性它也有优点在可执行程序中已经具备了所有执行程序所需要的任何东西运行时间较快动态链接是在运行时将需要的文件链接起来形成可执行程序。它把程序按照模块拆分成各个相对 独立部分在程序运行时才将它们链接在⼀起形成⼀个完整的程序。因此它的内存空间所需较小更新也简单但牺牲了一些运行时间。因此动态链接最常用那什么是动静态库呢。库是我们所需要的函数的实现的地方我们包含的头文件中只做了声明真正的实现在库中。静态库是指编译链接静态链接时把库文件的代码全部加入到可执行文件中因此生成的文件比较大但在运行时也就不再需要库文件了。其后缀名⼀般为“.a”。动态库是在程序执行时由运行时链接动态链接文件加载库会节省系统的开销。动态库⼀般后缀名为“.so”如libc.so.6 就是动态库。gcc在编译时默认使用动态库