-
Notifications
You must be signed in to change notification settings - Fork 32
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
编译器的工作过程(以gcc编译器为例) #2
Comments
补充一下 3、确定依赖关系 Makefile的依赖关系保证两点 对于C语言,通常用两种依赖关系 *. 静态链接和动态链接 PS:GCC、G++这些是编译器,Makefile算构建工具,负责按照依赖关系和规则生成各种目标文件。 |
大家都知道,我们用c、c++写出来的程序计算机是看不懂的,计算机只能看懂由0和1组成的机器码。这个将高级语言翻译成机器语言的过程由谁来做呢?编译器。编译器的作用就是将源码翻译成计算机可以看懂的语言,并且生成计算机可以执行的程序。下面我主要介绍一下gcc(GNU Compiler Collection, GNU编译器套件, 可以编译包括c、c++、Fortran、Pascal、Objective-C、Java、Ada和Go在内的多种编程语言)的工作过程。
B.c:
则经过预处理后,B文件会变成下面的样子:
6、编译(Compilation) 至此,编译器的任务就告一段落了。不过上面提到了静态链接,那么这里我还想再提一下与之相对应的动态链接。 By Caesar |
@hongruiqi 谢谢琦哥的补充~ |
因为静态链接的种种限制,所以现在很多软件都采取了动态链接的形式,在运行时才进行库文件的装载,它们在Linux系统下以.so为后缀。比如说PHP的一些扩展(memcached、curl等),就是这样被安装起来的...对于解释型脚本语言都可以看作是可执行程序。这样做最大的好处我觉得是解耦化,将一些不常用的组件与主程序剥离开来,只留下最核心的东西,剩下的可以依据用户的需要另行加载。所以对于大型的项目,模块化的思想是十分有必要的,以上~ |
动态库的两个优点:
|
编译器的工作过程(以gcc编译器为例).pdf
The text was updated successfully, but these errors were encountered: