C/C++::浅谈.obj .exe .dll .lib关系&& .a .so .o关系

浅谈.lib .dll .obj 关系&& .a .so .o关系 


一、.obj .exe .dll .lib

(1).obj

  • 目标文件,相当于源代码对应的二进制文件。
  • obj文件就是用.c .cpp .h文件经过编译器编译之后生成的目标文件。

(2).exe

  • 将程序运行所需要的全部.obj文件连接起来,即形成.exe文件。
  • 也就是windows下的可执行文件。
  • obj只给出了程序的相对地址,而EXE是绝对地址

(3).dll

  •  .dll是可提供给多个程序同时使用的可执行代码和数据(资源 )的库
  • 可简单理解为封装好的.cpp,里面装的是函数的具体实现
  • .dll是动态编译出来的程序运行时所需要的库,没有.dll文件,动态编译的程序就不能运行

(4).lib

  • .lib是编译程序时所需的,非运行时所需
  • .lib分为静态和动态
  • 静态.lib包括了方法及其具体实现。
  • 动态.lib只有方法的声明,相当于一个h文件,是对实现部分(.dll文件)的导出部分的声明。
  • 利用静态lib编译出来的程序,运行时不需要.dll文件的支持。
  • 利用动态lib编译出来的程序,运行时需要.dll文件提供方法的具体实现
  • 实际上:.lib文件可看做是若干个.obj文件的集合

(5)一个C/C++工程需要用到其他.c .h .cpp类库、函数库时,其包含的方式有如下图的几种方式

  • 1、最直接的方式就是将该类库的.h .cpp 直接引入到工程中,直接完全编译
  • 2、另外的方法是先将该类库生成为一个静态的lib库,引入工程时只需包含.h以及.lib文件,编译时将所需的方法具体实现从.lib中提取到可执行文件,可执行文件可不需要其他东西的支持就可直接运行
  • 3、常用的方法是将该类库生成一个动态的lib库,还有与之对应的.dll文件,引入工程时也只需包含.h以及.lib文件,但这个动态的.lib文件仅仅提供方法的声明,具体的实现被打包在.dll文件中,因此运行生成的可执行文件需要.dll文件的支持

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章