http://blog.csdn.net/viewcode/article/details/8021989

在core.hpp中,CV_EXPORT是出现频率最高的词之一。

1. CV_EXPORT是什么? 有什么用?

2. CV_EXPORT会涉及到dll的东西,那么dll是什么,lib与dll的区别是什么?

CV_EXPORTS 出现的用法:

class CV_EXPORTS MatExpr;

template<typename _Tp> class CV_EXPORTS Size_;

CV_EXPORT的定义:

#if (defined WIN32 || defined WIN64) && defined CVAPI_EXPORTS     #define CV_EXPORTS __declspec(dllexport) #else     #define CV_EXPORTS #endif
实质上就是__declspec(dllexport)的定义:

msdn对其解释:

http://msdn.microsoft.com/zh-cn/library/a90k134d(v=vs.80).aspx

在更新的编译器版本中,可以使用 __declspec(dllexport) 关键字从 DLL 导出数据、函数、类或类成员函数。

__declspec(dllexport) 会将导出指令添加到对象文件中,因此在指定的对象文件里您不需要使用 .def 文件。当试图导出 C++ 修饰函数名时,这种便利最明显。

若要导出类中的所有公共数据成员和成员函数,关键字必须出现在类名的左边。

其他概念:

动态链接库中定义有两种函数:导出函数(export   function)和内部函数(internal   function)。 
导出函数可以被其它模块调用,内部函数在定义它们的DLL程序内部使用。

MFC提供的修饰符号_declspec(dllexport) 就是表示导出函数或变量。

模块定义文件(.DEF)是一个或多个用于描述DLL属性的模块语句组成的文本文件。

----------------------------------------------------------

lib与dll的区别:

1. 使用方式有什么不同?

2. 原因是什么?

其实lib无论怎么样,都会用到。

一种是lib单独使用,另外一种是lib+dll的方式(平时所说的dll的方式)。

lib单独使用:

1. LIB包含函数代码本身,不仅包含头文件,还有源码,在编译时直接将代码加入程序当中,称为静态链接库static link library。链接生成的程序可以独立运行。

即lib文件是静态编译出来的,索引和实现都在其中。

2. 同一机器,多个同种程序运行,每个程序都会加载一份代码库。

3. 任何改动,都需要重新编译、链接,这个对大型的程序非常不便,升级也麻烦。有时,在更改数据结构时,需要重新编译整个工程,而非只编译、链接单个lib。

lib+dll方式:

1. LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library。生成的程序需要dll配合使用。

即lib一般是一些索引信息,记录了dll中函数的入口和位置,dll中是函数的具体内容。应用程序使用LIB文件链接到DLL文件。在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中相应函数代码的地址,从而节省了内存资源。

2. 多个程序运行,共享一份代码。节省内存。

3. 当 DLL 中的函数发生更改时,只要函数的参数和返回值没有更改,就不需重新编译或重新链接使用它们的应用程序。

使用方式的差别:

1. 静态lib
需要.h和lib。
在生成lib时,相当于cpp编译的obj的集合。链接时,指定lib的位置。
 
2. 动态lib
实质上是dll的使用方式。
在生成dll时,会生成一个lib,lib里包含的是索引信息。
编译链接时,需要.h,lib。
运行时,需要程序和dll。

有关dll和lib的信息还很多,暂时理解到这个层面吧。

msdn的链接:

http://msdn.microsoft.com/zh-cn/library/dtba4t8b(v=vs.80).aspx

runtime library如何选择?

参考 http://blog.csdn.net/viewcode/article/details/8508211多线程编程中的操作系统概念

【转】CV_EXPORT定义的作用,lib及dll的区别的更多相关文章

  1. LIB和DLL的区别与使用

    转这篇文章是因为以前有个误区,以为lib为静态库,dll为动态库,这理解并不错,但不全面.lib分两种的:(1) lib包含所有内容的静态库,应用程序用它即可,这是我理解的一种(2) lib只包含头部 ...

  2. C/C++ 知识点---LIB和DLL的区别与使用(网摘)

    LIB和DLL的区别与使用 原文出处:[远风工作室] 共有两种库:一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dyna ...

  3. C++:LIB和DLL的区别与使用

    共有两种库: 一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library. 一种是LIB包含 ...

  4. windows环境下lib和dll的区别和联系详细

    https://blog.csdn.net/ghevinn/article/details/43759655 c++中共有两种库:1.LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代 ...

  5. (转)LIB和DLL的区别与使用

    共有两种库:一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library.一种是LIB包含函数 ...

  6. 摘:LIB和DLL的区别与在VC中的使用

    共有两种库:一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library.一种是LIB包含函数 ...

  7. windows下LIB和DLL的区别与使用

    共有两种库: 一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library. 一种是LIB包含 ...

  8. VS 中的 lib 和 dll 的区别和使用

    在 vs/c# 项目开发中,经常会遇到 lib 和 dll 文件,而且创建工程项目以及工程项目打包时也是必须要面对的,所以有必要掌握 lib 和 dll 的区别和使用. 静态库:在链接步骤中,连接器将 ...

  9. lib 和 dll 的区别、生成以及使用详解

    首先介绍一下静态库(静态链接库).动态库(动态链接库)的概念,首先两者都是代码共享的方式. 静态库:在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中,这种库称为静态库,其特点是可 ...

随机推荐

  1. HDOJ 4336 Card Collector

    容斥原理+状压 Card Collector Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  2. HDOJ 3853 LOOPS

    水概率DP.... LOOPS Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/Others ...

  3. 【PHP面向对象(OOP)编程入门教程】10.__set(),__get(),__isset(),__unset()四个方法的应用

    一般来说,总是把类的属性定义为private,这更符合现实的逻辑.但是, 对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义了两个函数”__get()”和”__set()”来获取和赋值其属性 ...

  4. C#操作Word的超详细总结

    本文中用C#来操作Word,包括: 创建Word: 插入文字,选择文字,编辑文字的字号.粗细.颜色.下划线等: 设置段落的首行缩进.行距: 设置页面页边距和纸张大小: 设置页眉.页码: 插入图片,设置 ...

  5. Pcserver+oracle10g+rac

    成本的相对廉价,技术的成熟,功能的强大此方案将越来越受中小企业的青睐.     一.实验前准备 虚拟机版本:Vwareserver1.0.6 Linux版本:redhat5.5enterprise服务 ...

  6. BZOJ1012——[JSOI2008]最大数maxnumber

    1.题目大意:求末尾L个数的最大值,强制在线 2.分析:这个拿线段树可以直接水过,然后我写了一个 维护单调栈, 二分求最大值的短代码,手懒.... #include <cstdio> #i ...

  7. 在 2017 年将会更加流行的 6 个 Web 开发趋势

    2016即将过去,2017就要来临. 前阵子看到很多对2016前端领域的总结,也是有人欢喜有人忧啊. 转发了这一篇2017web的发展趋势.那么到底会是怎么样的一个发展趋势的,只好拭目以待了. 201 ...

  8. ios中二维码的使用之一: 二维码的生成

    iOS在7之后,具备了原生的二维码生成API; 生成二维码的准备:  #import <CoreImage/CoreImage.h> 导入框架: 开始生成: //1- 创建过滤器 CIFi ...

  9. cvLoadImage

    编辑 本词条缺少名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 函数原型:IplImage* cvLoadImage( const char* filename, int flags= ...

  10. u-boot 流程分析

    u-boot 介绍: 对于计算机来说 , 从一开始上机通电是无法直接启动操作系统的 , 这中间需要一个引导过程 , 嵌入式Linux系统同样离不开引导程序 ,  这个启动程序就叫启动加载程序(Boot ...