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. web api 处理发送过来的文件(图片)

    using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.We ...

  2. AlwaysOn可用组基础知识

    AlwaysOn可用组概念 AlwaysOn作为SQL Server2012新功能,其目的主要为了替代镜像功能. AlwaysOn拥有镜像的同步和异地容灾功能,并能在镜像的基础上实现一对多的镜像副本同 ...

  3. Windows Phone 开发环境的搭建

    1. 系统 系统:Windows 7(32 位).Windows 7(64 位).Windows Vista SP2(32 位)和 Windows Vista(64 位)或者更高版本. 不支持 :Wi ...

  4. PHP文件的上传与下载

    文件上传: 1.单个与多个文件上传 2.上传表单的属性设置 3.PHP配置文件中相关文件上传的设置 4.PHP处理上传的文件数据 php.ini配置: file_uploads = on; 默认on ...

  5. HDOJ 2929 Bigger is Better

    DP....好难的DP... Bigger is Better Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  6. MySQL Cluster 配置文件(config.ini)详解

    MySQL Cluster 配置文件(config.ini)详解 ################################################################### ...

  7. Javascript高级程序设计——javascript简介

    1.Javascript简史 javascript诞生于1995年,是由网景公司的Brendan Eich开发的,最初的目的是在客户端处理一些输入验证操作,自此后成为常见浏览器的特色功能,如今用途已经 ...

  8. html5 图片转为base64格式异步上传

    因为有这个需求(移动端),所以就研究了一下,发现还挺不错的.这个主要是用了html5的API,不需要其他的JS插件,不过只有支持html5的浏览器才行,就现在而言应该大部份都支持的.<!DOCT ...

  9. Java Io(数据输入输出流)

    Java Io 字节流中的DataInputStream 和 DataOutputStream,使用流更加方便,是流的一个扩展,更方便读取int, long,字符等类型数据. 事例代码如下: pack ...

  10. hiho #1372:平方求 (bfs)

    #1372 : 平方求和 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 对于一个非负整数n,最少需要几个完全平方数,使其和为n? 输入 输入包含多组数据.对于每组数据: ...