1. 程式人生 > >MFC、共享庫、靜態庫

MFC、共享庫、靜態庫

用MFC作為共享的DLL和作為靜態連結庫有什麼區別
Release設定為靜態的,生成的exe檔案比  
Debug設定為共享的DLL生成的exe還要大

------解決方案--------------------------------------------------------
共享DLL, EXE小,但是如果系統中沒有這個DLL,就無法執行。

 靜態連結,是把程式碼連結到EXE中,EXE大,但是不依賴那個DLL了。 
------解決方案--------------------------------------------------------
沒有安裝vc的機器也能執行靜態連結的,如果動態連結你還要帶著一個mfcxxx.dll才能在沒有vc的機器上執行 

------解決方案--------------------------------------------------------
每個程序載入的 MFC 靜態的庫不能超過 64 個,且 size 比較大;

動態連結的缺點是安裝釋出的時候必須帶 MFC42/MSVCRT 等,優點是沒有這個 64 的限制。 
------解決方案--------------------------------------------------------
靜態連結,將DLL庫的內容,直接新增到生成的EXE中,並作為EXE檔案的一個靜態部分執行。作為靜態連結,你不需要擔心執行時需要的相關庫檔案,因為都連結到EXE檔案中了。

動態連結,生成的EXE檔案,公包括EXE內部的內容,執行時,根據需要,載入相應的DLL。作為動態連結,你需要將執行時相關的DLL庫檔案放到相關的地方(1、與EXE同文件夾;2、系統環境變數Path指定的其它路徑)。

關於記憶體訪問,使用靜態連結,在DLL中動態分配(new)的記憶體,只能由DLL回收(delete),強制EXE回收可能會有異想不到的結果。動態連結,在DLL裡動態分配(new)的內在,可由EXE回收(delete)。

相關推薦

Linux下建立檢視提取和修改靜態(*.a)

先說明一點,靜態庫檔案是由多個目標檔案打包而成的,在windows下靜態庫檔案的字尾是.lib,而在linux下靜態庫檔案的字尾是.a(a是archive的縮寫,也就是文件檔案)。   廢話少說,下面直接進入主題。   1.建立兩個c檔案:addition.c 和 mul

qt動態靜態編譯應用以及pri檔案建立

一. 靜態庫的生成 1. 測試目錄: lib 2. 原始碼檔名: mywindow.h, mywindow.cpp 3. 編寫專案檔案: mywindow.pro 注意兩點: TEMPLATE = libCONFIG   += staticlib  4. 生成M

破窗理論C++ 函式模板靜態

最近在搬磚,本以為僅僅是體力活而已,無奈自己功力不夠,處處碰壁。 這次的需求及其背景: 業務中有一個recommendId的東西,型別是string或者vector< char >。 第一個位元組(即recommendId[0])用來標識資料所

動態靜態編譯測試:含靜態連結動態靜態,動態連結靜態動態

本文的目的是測試各種型別庫的編譯後的使用效果,包括庫又連結其他庫的編譯方法,使用方法,依賴性等。 太長不看版:請跳至文章最後的總結對比表。 一。內容包含: ①靜態庫libbb.a依賴靜態庫libaa.a的測試; ②靜態庫libbb.a依賴動態庫libaa.so的測試;

自己在linux上編譯連結動態靜態的學習筆記

在平常的專案中,我們都是使用公司要求的makefile、makedebug一類的檔案,因此,在編譯、連結、生成和連結動態庫與靜態庫的時候,我們只是簡單的使用一些已經設定的變數,只是簡單的修改、新增一些檔名,或許這次我們編譯通過了,但是,在某一個時候,可能出現了一個問題,無論

linux下動態靜態的製作尋找比較及相關Makefile的編寫

一.庫的定義 什麼是庫,在windows平臺和linux平臺下都大量存在著庫。 本質上來說庫是一種可執行程式碼的二進位制形式,可以被作業系統載入記憶體執行。 由於windows和linux的本質不同,

Android NDK生成共享靜態

在Android平臺上,通過NDK可以編譯NativeC程式,生成原生的NativeCode。從生成的程式碼的使用方式來看,主要有三種形式:Native Executable Binary, Shared Dynamic Library, 以及Static Link L

linux兩種:動態靜態(共享)說明

linux下有兩種庫:動態庫和靜態庫(共享庫) 二者的不同點在於程式碼被載入的時刻不同。 靜態庫的程式碼在編譯過程中已經被載入可執行程式,因此體積比較大。 動態庫(共享庫)的程式碼在可執行程式執行時才載入記憶體,在編譯過程中僅簡單的引用,因此程式碼體積比較

malloc,colloc,realloc內存分配,動態靜態的生成與調用

lac 輸出 初始化 clu 技術 pragma num idt return ?? 1.在main方法裏面直接定義一個很大的數組的時候。可能會出現棧溢出:錯誤代碼演示: #include<stdio.h> #include<stdlib.h&g

iOS 使用 Xcode8 制作動態靜態

三方 不想 -1 有關 module user pub nes 也有   在使用第三方 SDK 時,經常遇到他們提供的僅僅只有一個動態或靜態庫,並不能獲取源碼。使用動態庫 FrameWork 或 靜態庫 Lib,可以滿足不想把核心代碼的具體實現向使用者展示,又能避免其他人錯

動態靜態優缺點比較

命令 編譯 現實 產生 會有 重新編譯 種類 並且 發現 動態庫與靜態庫優缺點比較 (2012-10-18 15:31) 我們在編寫一個C語言程序的時候,經常會遇到好多重復或常用的部分,如果每次都重新編寫固然是可以的,不過那樣會大大降低工作效率,並且影響代碼的

動態靜態

共享 才會 編譯 found bsp 文件 二進制 size article 轉載自:https://blog.csdn.net/sheng_bin/article/details/52961520 什麽叫庫? 庫(Library)說白了就是一段編譯好的二進制代碼,加上頭文

Linux下RabbitMQ的編譯,生成動態靜態

執行 編譯 ast lin 目錄 off href apt-get span 一、步驟 1、代碼托管處下載代碼 最新:https://github.com/alanxz/rabbitmq-c/archive/master.zip 穩定:https://g

動態靜態

linu not fine 執行文件 port pic 靜態庫 可執行 生成可執行文件 前提:本文是基於Linux系統下的編程與學習 補充:頭文件衛士,避免頭文件重復包含。 //頭文件衛士 #ifndef __HEAD_H__ #define __HEAD_H__ //頭

iOS裡的動態靜態

介紹 動態庫形式:.dylib和.framework 靜態庫形式:.a和.framework 動態庫和靜態庫的區別 靜態庫:連結時,靜態庫會被完整地複製到可執行檔案中,被多次使用就有多份冗餘拷貝(圖1所示) 系統動態庫:連結時不復制,程式執行時由系統動態

【QtCreator】QtCretor多個專案管理,動態靜態

參考連結: 1、https://blog.csdn.net/libaineu2004/article/details/23625441 2、https://www.cnblogs.com/codingmengmeng/p/7456539.html (注:本人測試在Ubuntu18.0

mysql 悲觀鎖共享排它鎖行鎖

悲觀鎖 與樂觀鎖相對應的就是悲觀鎖了。悲觀鎖就是在操作資料時,認為此操作會出現資料衝突,所以在進行每次操作時都要通過獲取鎖才能進行對相同資料的操作,這點跟java中的synchronized很相似,所以悲觀鎖需要耗費較多的時間。另外與樂觀鎖相對應的,悲觀鎖是由資料庫自己實現了的,要用的時候,我們

Linux 動態靜態

Linux作業系統中,依據函式庫是否被編譯到程式內部,將其分為兩大類,靜態函式庫和動態函式庫。 Linux下的函式庫放在/lib或/usr/lib,標頭檔案放在/usr/include。 在既有靜態庫又有動態庫的情況下,預設使用動態庫,如果強制使用靜態庫則需要加-static選項支援。

mysql樂觀鎖悲觀鎖共享排它鎖

我們在操作資料庫的時候,可能會由於併發問題而引起的資料的不一致性(資料衝突) 樂觀鎖 樂觀鎖不是資料庫自帶的,需要我們自己去實現。樂觀鎖是指操作資料庫時(更新操作),想法很樂觀,認為這次的操作不會導致衝突,在操作資料時,並不進行任何其他的特殊處理(也就是不加鎖),而在進行更新後,再去判斷是否

C++---動態靜態的區別

首先介紹一下靜態庫(靜態連結庫)、動態庫(動態連結庫)的概念,首先兩者都是程式碼共享的方式。 靜態庫:在連結步驟中,聯結器將從庫檔案取得所需的程式碼,複製到生成的可執行檔案中,這種庫稱為靜態庫,其特點是可執行檔案中包含了庫程式碼的一份完整拷貝;缺點就是被多次使用就會有多份冗餘拷貝。即靜態庫中的指