程序的编译与执行

       昨天配置了Opencv3.3+VisualStudio2015,由于本人基础太薄,中间出现了一些错误,所以写篇博客记录一下。

       配置Opencv其实大体上为两步:

      1.配置系统环境变量(即将包含opencv中.dll的文件夹地址放置到PATH中,这一步好多人都会出错,出错会导致最后程序编译 ,成功但无法找到.dll文件)

      2.配置工程中的属性表VC++ Directories中加入包含文件(Include Diretories)、库文件(Library Directories),       然后在             Linker→Input→Additional Dependencies加入.lib文件

程序的编译与执行

   

      编译分为两个过程,编译和汇编。编译时读取源程序(.c),对之进行词法与语法的分析,将高级语言转换为等效的汇编代码(.s,低级机器语言);汇编是把汇编语言代码(.c)翻译成目标机器指令(.object,二进制文件,其为机器语言指令而不是字符)的过程。

       静态编译:编译器在编译可执行文件时,把需要用到的对应动态链接库(.so或.ilb)中的部分提取出来,链接到可执行文件中去,使可执行文件在运行时不需要依赖于动态链接库。

        动态编译:动态编译的可执行文件需要附带一个的动态链接库,在执行时,需要调用其对应动态链接库中的命令。所以其优点一方面是缩小了执行文件本身的体积,另一方面是加快了编译速度,节省了系统资源。缺点一是哪怕是很简单的程序,只用到了链接 库中的一两条命令,也需要附带一个相对庞大的链接库;二是如果其他计算机上没有安装对应的运行库,则用动态编译的可执行文 件就不能运行。

      静态链接库:

静态链接库就是你使用的.lib,库中的代码最后需要连接到你的可执行文件中去,所以静态连接的可执行文件一般比较大一些。格式如:xxx.lib静态链接库不同于动态链接库(*.dll),在静态库情况下,函数和数据被编译进一个二进制文件(通常扩展名为*.LIB),Visual C++的编译器在链接过程中将从静态库中恢复这些函数和数据并把他们和应用程序中的其他模块组合在一起生成可执行文件。这个过程称为"静态链接",此时因为应用程序所需的全部内容都是从库中复制了出来,所以静态库本身并不需要与可执行文件一起发行。如果使用Visual Studio,位置在 项目→配置属性→连接器→输入→附加依赖项 中加入.lib文件
动态链接库:
动态链接库(Dynamic Link Library 或者 Dynamic-link Library,缩写为 DLL),是微软公司在微软Windows操作系统中,实现共享函数库概念的一种方式。这些库函数的扩展名是 ”.dll"、".ocx"(包含ActiveX控制的库)或者 ".drv"(旧式的系统驱动程序)。动态链接库文件,是一种不可执行的二进制程序文件,它允许程序共享执行特殊任务所必需的代码和其他资源。Windows 提供的DLL文件中包含了允许基于 Windows 的程序在 Windows 环境下操作的许多函数和资源。一般被存放在电脑的"C:\Windows\System32" 目录下。