https://blog.csdn.net/u013634684/article/details/48289449
https://blog.csdn.net/woainishifu/article/details/53507723
PS :关于使用VS时,遇到的一些疑问,做了个整理 ~
想要发一些感慨,之前很多东西其实是不理解的,现在看多了,慢慢脑子里面有个大概的图谱,把学到的东西串起来,这样有了更深入的理解
一、VS
- .sln:解决方案文件
一个解决方案里面可以包含多个工程
- .vcproj:工程文件
只打开vcproj文件编译不了,可能是因为这个工程里面用到了同一个解决方案中其它工程
二、Debug和Relesse版本
1. Debug
调试版本,包含调试信息,除了.exe 和 .dll 文件外,还包括了.pdb文件记录代码断点等调试信息
使用调试版本运行时刻的函数库
2.Release
发布版本,不进行调试,编译时对速度进行优化
使用发布版本运行时刻的函数库
三、运行时库
1. 运行时库
Runtime Library 就是运行时库,也简称 CRT(C Run Time Library),是程序在运行时所需要的库文件,通常运行时库是以 lib 或 dll 形式提供的
运行时库指的就是对这些底层的基础功能实现的动态库(dll),只有程序用到了它才会被加载,没有程序使用的时候不会驻留内存的
虽然运行时库应该是动态库,但 习惯上把与动态运行时库相同代码编译出来的静态库也称为运行时库
2. 设置
Properties->Configuration Properties->C/C++->Code Generation->Runtime Library 中设置采用的运行时库的类型
3. CRT的类型
- MT:Release版的多线程静态库
- MTd: Debug版的多线程静态库
- DLL/MD:Release版的多线程动态库
- DLL/MDd:Debug版的多线程动态库
四、opencv
1.vc10, vc11, vc12
vc10, vc11, vc12 分别表示VS2010, VS2012, VS2013的Visual Studio使用的编译器版本
2.x86, x64
不同的指令集架构:
- x86 支持32位的intel/AMD/VIA的CPU,并向下兼容16位 32位系统
- x64 支持32位和64位的intel/AMD CPU,指令集与x86兼容,并向下兼容16位、64位系统
3.配置第三方库
(1)头文件:一般放在include路径下
h文件是头文件,需要通过#include这种方式引用的,所以对应的是包含目录
(2)dll文件:一般放在bin 路径下
dll文件是可执行文件,所以对应的是可执行文件目录
(3)lib文件:一般放在lib路径下
lib文件是库文件,所以对应的是库目录
五、第三方库的使用
1. 添加头文件
PS:这里其实我不是很理解,分成VC++目录和C/C++,看到网上是这样区分的
VC++的包含目录:头文件的路径
(PS:这实我不是很理解,VC++目录和C/C++的包含目录有什么区别,看到网上是这样区分)
- VC++的包含目录:代表的是所有项目的包含目录,配置过VC++里面的库,C/C++里面的就可以不用配置
- C/C++的附加包含目录:代表的是C/C++文件编译时所需要的头文件,针对当前项目
- VC++的可执行文件目录:dll的路径
- VC++的库目录:lib的路径
2. 添加库
链接器-附加库目录:库文件的路径
链接器-附加依赖项:库文件
PS:我今天突发奇想问了师兄一个问题,就是在添加其它库的时候,是否可以不添加相应的头文件?
我看知乎上有人就有问,编写C语言程序时必须有#include\<stdio.h>?
有一条回答可以解答这个疑问,主要还是看编译器,有些编译器会默认隐含包含stdio.h和stdlib.h两个头文件,使没有自己手动包含也不会报错
关于静态链接和动态链接: