opencv永久性配置與基本問題
1.Debug和Release的區別
Debug 通常稱為調試版本,它包含調試信息,並且不作任何優化,便於程序員調試程序。Release 稱為發布版本,它往往是進行了各種優化,使得程序在代碼大小和運行速度上都是最優的,以便用戶很好地使用。
Debug 和 Release 的真正秘密,在於一組編譯選項。下面列出了分別針對二者的選項(當然除此之外還有其他一些,如/Fd /Fo,但區別並不重要,通常他們也不會引起 Release 版錯誤,在此不討論)
DEBUG:/MDd /MLd 或 /MTd 使用 Debug runtime library(調試版本的運行時刻函數庫)
release;/MD /ML 或 /MT 使用發布版本的運行時刻函數庫
在工程上右鍵-》屬性-》c/c++-》代碼生成-》運行庫;
多線程調試Dll (/MDd) 對應的是MD_DynamicDebug
多線程Dll (/MD) 對應的是MD_DynamicRelease
多線程(/MT) 對應的是MD_StaticRelease
多線程(/MTd)對應的是MD_StaticDebug
注意:
不能將debug和release版的DLL(動態鏈接庫)混合在一起使用。debug都是debug版,release版都是release版。 解決辦法是將debug和release的程序分別放在主程序的debug和release目錄下
2.何為動態鏈接庫DLL(Dynamic-link library,縮寫為DLL)
dll只是一組源代碼的模塊,每個模塊包含一些可供應用程序或者其他dll調用的函數,在應用程序調用一個dll裡面的函數的時候,操作系統會將dll的文件映像映射到進程的地址空間中,這樣進程中所有的線程就可以調用dll中的函數了
dll載入完成後,這個時候dll對於進程中的線程來說只是一些被放在地址進程空間附加的代碼和數據,操作系統為了節省內存空間,同一個dll在內存中只有一個,也就是說如果你的的兩個應用程序都需要載入user32.dll,那麼操作系統也只會載入一次user32.dll到內存中
ps:有main函數的代碼可以編譯成二進位,其他的則編譯成庫文件。鏈接時,把庫文件鏈到二進位上,就可以運行
TAG:程序員小新人學習 |