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定義的作用,lib及dll的區別
在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
KVO,NSNotification,delegate及block區別
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>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訪問淘寶,分別分別用自己的賬號和淘寶互動,就有兩個不同的會話。 為什麼進行會話跟蹤呢?