发布于2023-01-20 09:32 阅读(865) 评论(0) 点赞(9) 收藏(1)
- 预处理阶段:gcc -E hello.c -o hello.i 对源代码文件中包含关系(头文件),预编译语句(宏定义)进行分析和替换,生成预编译文件。
- 编译阶段:gcc -s hello.i -o hello.s 将经过预处理后的预编译文件转换成特定汇编代码(编译原理相关,词法分析,语法分析,语义分析等),生成汇编文件。
- 链接阶段: gcc hello.o -o hello 将多个目标文件及所需要的库打包连接成最终的可执行目标文件(或库文件以供其他程序使用)
- C中:头文件后缀名 .h, 源文件后缀名 .c
- C++ 中: 头文件后缀名 .h .hpp .hxx ,源文件后缀名为: .cpp .cc .cxx
- .h和.hpp 的区别: *.h 里面只有声明,没有实现, 而 *.hpp 里面既有声明也有实现,后者可以减少 .cpp 数量,适合用来编写公用的 开源库
- inl 文件是 内联函数的源文件,内联函数通常在 C++头文件中实现,但有的时候,内联函数较多或者出于一些别的考虑(比如:头文件看起来更加简洁)往往会将这部分具体定义的代码添加到 INL文件中,然后在该头文件的末尾将其用 #include 引入。 由此也可以看到 inl 文件的一个用法影子 ------模板函数,模板类的定义的代码的存放。
- 简单来说:gcc 和g++都是 GNU组织的一个编译器,都可以编译C代码与 C++代码。但是,后缀为 .c的, gcc 把它当做 C程序,而g++当做 C++程序;后缀为 .cpp 的,两者都会认为是 C++程序。
- 编译阶段:g++会调用gcc ,对于C++代码,两者是等价的,但是因为gcc 命令不能自动和C++程序使用的库联接,所以通常使用 g++来完成链接
- gcc 编译cpp 可以使用命令: gcc main.cpp -lstdc++
- 静态链接是在形成可执行程序前,而动态链接的进行则是在程序执行时链接
- 静态链接浪费空间,这是由于多进程情况下,每个进程都要保持静态链接函数的副本,更新困难,当链接的众多目标文件有一个改变后,整个程序都要重新链接才能使用新的版本,但是静态链接运行效率高。
- 动态链接当系统多次使用同一个目标文件时,只需要加载一次即可,节省内存空间,程序升级变得容易,当升级某个共享模块时,只需要简单的将旧目标文件替换掉,程序下次运行时,新版目标文件会被自动装载到内存并链接起来,即完成升级
- 静态链接时以目标文件为单位,将各个目标文件连接起来形成可执行文件
- 动态链接的基本思想是把程序按照模块拆分成各个相对独立部分,在程序运行时才将他们链接在一起形成一个完成的程序,而不是像静态链接一样把所有程序模块都链接成一个单独的可执行文件。
原文链接:https://blog.csdn.net/u013620306/article/details/128668525
作者:你看我迷人不
链接:http://www.phpheidong.com/blog/article/477906/d8ca8eb3eb2606452f4d/
来源:php黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 php黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-4
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!