1. 源代码(.c等)要经过编译器编译得到目标代码(.obj),再经过链接器使目标代码库函数启动代码合并成一个文件,即可执行文件exe

2. 生成可执行文件时的链接过程又可根据链接库(动态链接库和静态链接库)的类型分为两种情况
##静态链接
需要的文件: 头文件 .h 、静态库 .lib、项目文件(src源码)、启动代码
a)使用静态链接库的项目先引用头文件.h(包含函数的声明等)经过编译得到目标代码
b)链接时将静态库**.lib文件**(包含了函数的定义——实体代码、符号表等)全都直接包含在最终生成的exe文件中。 运行最终的exe文件时不再需要lib。

##动态链接
需要的文件: 头文件 .h 、动态链接库的**.lib文件,动态链接库的.dll文件,项目文件(src源码)、启动代码
a)使用静态链接库的项目先
引用头文件.h(包含函数的声明等)经过编译得到目标代码
b)这里的.lib包含
dll文件与其中函数对应位置的信息**,.dll则包含了函数的定义——实体代码、符号表
c)链接时将**.lib文件和动态库.dll文件及目标代码一起生成.exe文件。lib文件给目标代码在dll的解析**提供路径。 但是此时的exe文件中并没有真正的函数实体,要把dll放在和exe同一个目录下,每次运行都需要去dll调用,采用 LoadLibrary-GetProcAddress-FreeLibrary方法进行函数导入。
与静态链接一样,一旦链接完成就不再需要lib文件。

dll文件(windows,又称类库)、so文件(unix)、lib文件、exe文件:都是系统中编译后产生的最终产物。dll库也叫共享库,他的链接机制允许多个工程调用一个dll执行exe文件,而lib则不可以。
lib是编译时需要的dll是运行时需要的。如果要完成源代码的编译,有lib就够了。如果也使动态连接的程序运行起来,有dll就够了 。 dll中其实就是一系列的API接口

obj文件是仅通过编译器编译后的产物,没有和链接器链接;仅仅是源码翻译的机器码,**缺少入口函数(启动代码)**和库函数,无法直接执行。

vcproj文件(工程文件)和sln文件(解决方案文件)可以看做不同级别的包含源代码的目录,其中还包含了部分配置信息。这个文件相当于linux系统中的makefile。cmake就是生成makefile的,VS其实也是一样,VS编译器会对新建的项目自动生成vcproj文件,并且实时更新。而VS的编译,其实就是基于这个类似makefile的vcproj的。一旦修改了.vcproj文件就需要重新build。
vcproj.filter是控制项目在VS中的展示界面的,修改后编译不会重新build。
包含关系:
sln /vcproj /.c
sln /vcproj /.h

解决方案文件sln的生成: 是由工程文件生成的,同时生成的还有exe文件。
动态链接库dll的生成: 2种情况
1.自己创建的项目:解决方案文件(sln) 选一下环境release等, 然后点击生成 ,再点击生成xxxx(U),即生成了dll文件
2.仅有下载的源码:通过cmake先对源码生成cmakelist.txt(相当于makefile和.vcproj,作用:定义源码编译链接的顺序等),然后用VS编译(make)出二进制文件(build)

exe文件与dll文件区别:

1. 类库生成的是dll,控制台console windows程序都是exe的
2.dll里包含了目标代码中要调用的方法,但不可直接执行(跟cpu打交道),只允许被调用;exe是可执行文件(可以直接跟cpu打交道),一般做为程序的执行入口。

Cmake:一种编译过程控制的软件(cuda10,cmake3.9.0+)
1.首先新建一个cmakelist.txt文件,然后编写一个基本设置,如版本及目录包括的源码文件、生成二进制码的目录
2.在工程总目录下新建build目录(这就是二进制码的目录)
3.configure,会生成makefile文件(unix下)或projects/workspaces(windows vsc++下)
4.进入build运行make即可完成编译。

系统中的obj文件、dll文件、so文件、lib文件、exe文件、vcproj文件、sln文件相关推荐

  1. 计算机丢失quartz.dll什么意思,win7系统中出现缺少quartz.dll文件的修复方法

    我们在win7系统电脑的使用中,有小伙伴发现系统的提示缺少quartz.dll文件没有了,这是怎么回事呢,今天小编就来跟大家分享一下win7系统下提示缺少quartz.dll文件的解决方法,如果你的电 ...

  2. php执行who命令,Linux_在Linux系统中使用who和whoami命令获取用户信息,who用法:who [选项]... [ 文件 | - phpStudy...

    在Linux系统中使用who和whoami命令获取用户信息 who用法:who [选项]... [ 文件 | 参数1 参数2 ] 显示当前已登录的用户信息. -a, --all             ...

  3. 快速理解Linux系统中用户和组的概念及如何查看存储用户与组信息的文件/etc/passwd,/etc/shadow,/etc/group及其子段意思

    文章目录 用户与组的类型 1.linux中用户的类型 2.linux中用户组的类型 3. linux中存储用户信息的文件是哪个?且其中的字段是什么意思 4.linux中存储组信息的文件是哪个?且其中的 ...

  4. 如何打开sln文件并显示窗口_在本机打开别人的sln文件

    sln:在开发环境中使用的解决方案文件.它将一个或多个项目的所有元素组织到单个的解决方案中.此文件存储在父项目目录中.解决方案文件,他是一个或多个.proj(项目)的集合 呵呵,今天没带书,就去网上找 ...

  5. 使用c++检查Linux系统某目录下硬盘空间,如果空间少于200m时删除最老的文件

    可以使用 C 语言的 statvfs 函数来检查 Linux 系统中某个目录的硬盘空间.具体来说,首先你需要获取目录的文件系统信息,然后再计算出剩余空间. 如果空间不足 200 MB,可以使用 C 语 ...

  6. 关于VS中的sln文件

    sln文件 我们在应用VC6以前,发现的是dsp和.dsw文件,打开dsw文件可以打开整个工程 VS.net2002以后是.vcproj和.sln .sln对应以前的.dsw .vcproj对应以前的 ...

  7. CENTOS/RHEL 7 系统中设置SYSTEMD SERVICE的ULIMIT资源限制

    转自 http://smilejay.com/2016/06/centos-7-systemd-conf-limits/ 在bash中,有个ulimit命令,提供了对shell及该shell启动的进程 ...

  8. Solaris 系统中的snoop命令详解

    原文地址:http://blog.51cto.com/candon123/153254 Snoop 是Solaris 系统中自带的工具, 是一个用于显示网络通讯的程序, 它可捕获IP 包并将其显示或保 ...

  9. linux打开开发者权限,在UOS系统中关闭开发者模式和在UOS个人版中打开开发者模式...

    本文介绍在UOS系统中关闭(退出)开发者模式的方法和在UOS个人版中打开开发者模式的方法. 声明 UOS官方设定是开启开发者模式的过程不可逆,如果需要退出就只能重装(或者还原到开启开发者模式以前). ...

最新文章

  1. winrar目录穿越漏洞(更新经验)
  2. 20181110-软件开发架构2
  3. Opengl-基本概念-可编程的渲染管线(僵硬啊)
  4. TIMING_05 VIVADO环境下的时序约束 之 基本时钟周期约束
  5. java 课后习题 温度转换
  6. 《计算机网络:自顶向下方法(原书第6版)》一第1章
  7. 计算机开机无讯号,【图片】电脑突然开机没反应,显示器没信号!~【显卡吧】_百度贴吧...
  8. 37、我的C#学习笔记3
  9. 斐讯K1K2刷机固件教程!最新最全整理版!(小米路由、newifi通用)
  10. 蚂蚁课堂视频笔记思维导图-3期 九、分布式缓存架构
  11. 搭建Vgg16训练CIFAR10数据集
  12. cuteftp下载文件变成macintosh格式
  13. 网络TDR测试软件,高分辨率TDR测试以及应用
  14. ch341a编程和ttl刷机区别_USB转TTL(CH341A)的注意事项及说明
  15. 张一鸣:创业6年,估值750亿美元!人才不是核心竞争力,机制才是!
  16. OpenCV:vector subscript out of range
  17. 手机百度浏览器ua标识在哪里_浏览器标识(ua)的那些事
  18. MIPI摄像头工程=7系列FPGA + OV5640(MIPI) + 15 分钟 + VITIS
  19. php++think命令报错,think命令行
  20. zabbix模板关联群组

热门文章

  1. web前端开发三个阶段和三要素,学前端必备基础知识
  2. vue组件测试-Vue Test Utils 应用入门
  3. 蓝牙触摸板键盘延迟卡顿断连的问题
  4. Java过滤XSS脚本攻击记录一下
  5. 解决微信小程序“app.json: [“workers“] 字段需为 目录“错误及worker的使用
  6. WebGL技术学习之路
  7. 富文本编辑器 Kindeditor 的使用和 常见错误
  8. # R语言——约瑟夫环
  9. 再见Excel!最强国产开源在线表格Luckysheet走红GitHub
  10. 独立钻石C语言Mac,C Code Develo‪p for Mac-C Code Develo‪p Mac版下载 V1.0-PC6苹果网