1. 程式人生 > >CV_EXPORT定義的作用,lib及dll的區別

CV_EXPORT定義的作用,lib及dll的區別


在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對其解釋:

在更新的編譯器版本中,可以使用 __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的連結:

runtime library如何選擇?

相關推薦

CV_EXPORT定義作用libdll區別

在core.hpp中,CV_EXPORT是出現頻率最高的詞之一。 1. CV_EXPORT是什麼? 有什麼用? 2. CV_EXPORT會涉及到dll的東西,那麼dll是什麼,lib與dll的區別是什麼? CV_EXPORTS 出現的用法: class CV_EXPO

什麼是閉包?閉包的作用用法優缺點

什麼是閉包? 1、變數作用域 要理解閉包,首先要理解javascript的特殊的變數作用域。 變數的作用域無非就兩種:全域性變數和區域性變數。 javascript語言的特別之處就在於:函式內部可以直接讀取全域性變數,但是在函式外部無法讀取函式內部的區域性變數。 注意點:在函式內部宣告變數的時候,一定要使

84_css筆記1_css的背景作用使用構成

一,css產生背景 web早期,由於html既寫結構又寫樣式,導致1,頁面缺乏結構性,降低了網頁的可訪問性。2,頁面維護越來越困難 在1995年,w3c開始釋出一種正在進行的計劃(work-in-prrgress) 稱之為css 與html相比,Css支援更豐富的

addEventLister和attachEvent的作用以及兩者的區別

在事件監聽方面,IE提供了attachEvent和detachEvent兩個介面,firefox提供了addEventLister和removeEventLister,最簡單的相容處理就是封裝這兩套介面。 需要特別注意,在firefox下事件處理函式中的this指向被監聽的元素本

golang語言學習第一課:如何定義變數筆記回顧

第一課主要講go語言如何定義變數 需要注意的是:go語言定義了變數一定要使用,不使用會提示出錯。這個機制比較好。 第一:完整變數定義法: var a int =3    注意:go語言跟其他語言定義變數不太一樣,型別放後面,符合人們思維的習慣。 第二種:var省略型別法: var a

KVONSNotificationdelegateblock區別

KVO就是cocoa框架實現的觀察者模式,一般同KVC搭配使用,通過KVO可以監測一個值的變化,比如View的高度變化。是一對多的關係,一個值的變化會通知所有的觀察者。 NSNotification是通知,也是一對多的使用場景。在某些情況下,KVO和NSNotification是一樣的,都是狀態變化之後告知

LIB,DLL區別 VS中如何新增LIB,DLL

LIB和DLL檔案在建立工程專案時是必須要面對的,下面的文章講述瞭如何新增LIB和DLL檔案以及兩者的區別。 1.載入lib/標頭檔案 分兩種方法: (1)適用於當前專案 1 第一步:專案->屬性->C/C++->常規->附加包含目錄(瀏

php常量提前定義常量魔術常量基本數據類型

append mark 推薦 系統 article color 浮點數 scalar markdown 常量 定義: 形式一 // define("PI",常量值); define("PI",3.14); define("school","講理"

2&gt;MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _calloc 已經在 LIBCMTD.lib(dbgcalloc.obj) 中定義

ont cal 鏈接器 使用 size lib rac amp svc 使用VS2010,在FireBreath裏面調用ortp庫和Speex庫。編譯的時候出現錯誤: 2>MSVCRTD.lib(MSVCR100D.dl

最強自定義PHP集成環境系統缺失dll和vc也能正常運行

缺少 免費 alt 系統 演示 php環境 com 解決 解決方案 PHPWAMP支持iis、apache、nginx等web服務器,並全部支持php多版本同時運行,無限自定義mysql、php PHPWAMP支持32和64,支持自定義自動匹配系統所需dll和vc,純綠化無

定義對象內容實例適合初學者

我們 reac == () chinese 函數 nbsp default 默認 【自定義對象】 1、基本概念 ①對象是擁有一系列無序屬性和方法的集合: ②鍵值對,對象中的數據,是以鍵值對的形式存在,對象的每個屬性和方法,都對應一個鍵名,以鍵取值。 ③屬性:

進程與線程的定義、關系區別

體系 主存 font 是把 ase 多少 單線程 一個 i/o 進程與線程的定義、關系及區別              ——參考博客文章:http://blog.csdn.net/yanxiaolx/article/details/51763372 一、進程的定

/proc目錄的作用利用/proc恢復刪除的文件

通過 start lsof命令 查看進程 disk nds 是否 數字 row 介紹: 在Linux系統中,/proc目錄是一個位於內存中的偽文件系統。該目錄下保存的不是真正的文件和目錄,而是一些“運行時”的信息,如CPU信息、負載信息、系統內存信息、磁盤io信息等。

關系型數據庫索引是什麽目的原理B,B+樹區別

b樹 內部 葉子節點 一個 記錄 tor .net 移動 tail 數據庫索引到底是什麽,是怎樣工作的? - CSDN博客http://blog.csdn.net/weiliangliang111/article/details/51333169MySQL索引原理及慢查詢優

空的宏定義作用常見用法

pre api std span 情況 方法 debug 編譯器 常見 我們學習宏定義的第一個概念是,宏定義作為替換作用。 例如: #define SIZE 32 // 接下來代碼使用SIZE就相當於32 宏定義是編譯器在編譯時,將程序中所有SIZE替換成32,

11.1 js中級資料型別、資料儲存方式、作用域記憶體空間的區別以及例識別。

一. 基本資料型別和引用資料型別的區別。     1.基本資料型別:基本資料型別就是簡單的操作值。     2.引用資料型別:就是把引用的地址賦給變數。   堆記憶體:     就是存放程式碼塊的,存放形式有兩種       1)物件以鍵值對的形式存放       2)引用資料型別的賦值,是把引用

4關於Cookie的原理、作用區別以及使用

1、cookie的作用: 我們在瀏覽器中,經常涉及到資料的交換,比如你登入郵箱,登入一個頁面。我們經常會在此時設定30天內記住我,或者自動登入選項。那麼它們是怎麼記錄資訊的呢,答案就是今天的主角cookie了,Cookie是由HTTP伺服器設定的,儲存在瀏覽器中,但HTTP協議是一種無狀態協議,

Cookie的原理、作用區別以及使用

1、cookie的作用: 我們在瀏覽器中,經常涉及到資料的交換,比如你登入郵箱,登入一個頁面。我們經常會在此時設定30天內記住我,或者自動登入選項。那麼它們是怎麼記錄資訊的呢,答案就是今天的主角cookie了,Cookie是由HTTP伺服器設定的,儲存在瀏覽器中,但HTTP協議是一種無狀態協議,

maven介紹(作用核心概念用法常用命令擴張配置)

maven介紹(作用,核心概念,用法,常用命令,擴張及配置) maven作用,核心概念(pom,repositories,artifact,build lifecycle,goal),用法(archetype意義及建立各種專案),maven常用引數和命令以及簡單故障排除 1、maven的作用 &

cookie和session介紹區別

一,什麼是會話跟蹤?為什麼要進行會話跟蹤? cookie和session,都是會話跟蹤技術。那麼什麼是會話?為什麼要跟蹤?十萬個為什麼ing 會話,指一個終端使用者與系統進行通訊的過程。比如,A和B訪問淘寶,分別分別用自己的賬號和淘寶互動,就有兩個不同的會話。 為什麼進行會話跟蹤呢?