c/C++中后缀obj/o lib/a dll/so bin文件意义
2016-03-16 22:39
253 查看
借鉴http://www.cnblogs.com/skynet/p/3372855.html
在我们日常编译过程中,常遇到各种后缀的文件,诸如题目中的,加上编译 链接,预处理等等乱七八糟很混乱,今天有幸总结了下。记下来防止以后忘了。
首先讲一下程序编译连接的过程
首先,由编辑器产生源文件。诸如.c .cpp的是源文件,纯文本格式。还有.h文件,是头文件,为用得比较多的函数什么的,类,放在一起,方便一个include就可以解决。此外头文件一般用一个同名的cpp放比较好,这样主要好辨识么。
这样原本文件就凑够了。接下来就是预处理什么的。预处理主要是宏替换,或者头文件替换。吧include的地方替换为头文件里。把#开头的地方用员意替换。
接着就是编译。把源文件.cpp编译成为。obj文件,在linux下就是.o文件。此时对于头文件里的东西只有声明而没有实现。实现是单独进行的。
然后进行连接。原本main.obj里的声明和 **.h对应**.obj进行连接。这样就可以进行正常运行了吧。链接就是把各种目标文件.obj/.o连接起来生成可执行文件。
注意在这儿,对于用的比较多的文件。比如说某一个函数或者类的实现在多个地方都可以用到。但是源文件只有一个地方。因此我们可以单独生成一个库文件。库文件就是用的比较多的文件。这样库文件就出现了。
库文件分为静态库文件lib/a和动态库文件dll/so文件。前面为windows下,后面为linux下的后缀名。库文件是从目标文件.obj/.o打包压缩而来。lib/a是指在连接的时候直接把文件加入到可执行程序中。而dll是指在运行时runtime才加载的库文件。一般dll都有一个对应lib引入。dll省空间但是调用,和目录容易出错。lib费空间但是调用方便。
bin文件则不一定是什么东西。是bin是binary缩写。二进制文件。具体是不是可执行文件那就不一定了。
在我们日常编译过程中,常遇到各种后缀的文件,诸如题目中的,加上编译 链接,预处理等等乱七八糟很混乱,今天有幸总结了下。记下来防止以后忘了。
首先讲一下程序编译连接的过程
首先,由编辑器产生源文件。诸如.c .cpp的是源文件,纯文本格式。还有.h文件,是头文件,为用得比较多的函数什么的,类,放在一起,方便一个include就可以解决。此外头文件一般用一个同名的cpp放比较好,这样主要好辨识么。
这样原本文件就凑够了。接下来就是预处理什么的。预处理主要是宏替换,或者头文件替换。吧include的地方替换为头文件里。把#开头的地方用员意替换。
接着就是编译。把源文件.cpp编译成为。obj文件,在linux下就是.o文件。此时对于头文件里的东西只有声明而没有实现。实现是单独进行的。
然后进行连接。原本main.obj里的声明和 **.h对应**.obj进行连接。这样就可以进行正常运行了吧。链接就是把各种目标文件.obj/.o连接起来生成可执行文件。
注意在这儿,对于用的比较多的文件。比如说某一个函数或者类的实现在多个地方都可以用到。但是源文件只有一个地方。因此我们可以单独生成一个库文件。库文件就是用的比较多的文件。这样库文件就出现了。
库文件分为静态库文件lib/a和动态库文件dll/so文件。前面为windows下,后面为linux下的后缀名。库文件是从目标文件.obj/.o打包压缩而来。lib/a是指在连接的时候直接把文件加入到可执行程序中。而dll是指在运行时runtime才加载的库文件。一般dll都有一个对应lib引入。dll省空间但是调用,和目录容易出错。lib费空间但是调用方便。
bin文件则不一定是什么东西。是bin是binary缩写。二进制文件。具体是不是可执行文件那就不一定了。
相关文章推荐
- Aut2Exe编译au3脚本为可执行文件
- CentOS 6.3下编译安装Ruby 2.0笔记
- 把Lua编译进nginx步骤方法
- Lua中编译执行代码相关的函数详解
- Chrome Visual Studio 2005下的编译过程
- Windows下使用Cygwin编译MySQL客户端
- android的编译和运行过程深入分析
- c#中xml文档注释编译dll引用到其它项目示例
- Lua cjson模块编译笔记及错误解决方法
- SQLSERVER编译与重编译发生场景及重用的利弊介绍
- 浅析使用Turck-mmcache编译来加速、优化PHP代码
- 如何编译libfreetype方法详解
- 深入理解C语言中编译相关的常见错误
- 在VS2008中编译MYSQL5.1.48的方法
- Nginx编译参数大全 configure参数中文详解
- centos下编译安装mysql报错解决方案
- Lua的编译、执行和调试技术介绍
- C/C++编译器GCC下的常用编译命令总结
- Mac下使用Eclipse编译C/C++文件出现 launch failed, binary not found 解决方案
- 简单分析针对ARM平台的C语言程序的编译问题