編譯配置的一些經驗
前提是庫已經和系統進行all built過了,所以DLL動態連結庫已經連結過了。
那麼需要什麼就直接把dll檔案給拿過來用,而且不用加什麼系統變數,
release 和 debug的區別
release比debug更快,一般就是debug進行除錯,release進行釋出。
所以可以把release和debug都可以先加到那個VS內部
要是新建工程以後 也可以直接用一步用專案屬性表來做。
如果不加系統環境變數
dll和比如要放到exe資料夾下面
庫如果衝突了,但是都需要,那麼就先把環境變數刪掉那一個 換上這一個 試試。
DLL檔案中存放的是各類程式的函式(子過程)實現過程,當程式需要呼叫函式時需要先載入DLL,然後取得函式的地址,最後進行呼叫。使用DLL檔案的好處是程式不需要在執行之初載入所有程式碼,只有在程式需要某個函式的時候才從DLL中取出。另外,使用DLL檔案還可以減小程式的體積。dll檔案就像是個倉庫把寫的程式碼存進去,用的時候就是根據地址拿出來就行了。
lib檔案和DLL檔案的區別。
LIB檔案中存放的是函式呼叫的資訊,值得一提的是資料庫有靜態資料庫(.lib檔案)和動態資料庫(.dll檔案)。
靜態編譯
靜態編譯將匯出宣告和實現都放在lib中。編譯後所有程式碼都嵌入到宿主程式。
靜態編譯的優點是編寫出來的程式不需要呼叫DLL和載入函式,直接可以當成程式的一部分來使用。
靜態編譯的缺點也是顯而易見的,使用靜態編譯的程式體積會比動態編譯大,原因是函式的實現被嵌入為程式程式碼的一部分。
動態編譯
動態LIB檔案相當於一個C語言中的h檔案,是函式匯出部分的宣告,而不將實現過程嵌入到程式本身中,編譯後只是將函式地址存在宿主程式中,執行到呼叫函式是呼叫DLL並載入函式來實現函式的具體操作。
(1)lib是編譯時需要的,dll是執行時需要的。
如果要完成原始碼的編譯,有lib就夠了。
如果要使動態連線的程式執行起來,有dll就夠了。
在開發和除錯階段,當然最好都有。
(2)一般的動態庫程式有lib檔案和dll檔案。lib檔案是必須在編譯期就連線到應用程式中的,而dll檔案是執行期才會被呼叫的。如果有dll檔案,那麼對應的lib檔案一般是一些索引資訊,具體的實現在dll檔案中。如果只有lib檔案,那麼這個lib檔案是靜態編譯出來的,索引和實現都在其中。靜態編譯的lib檔案有好處:給使用者安裝時就不需要再掛動態庫了。但也有缺點,就是導致應用程式比較大,而且失去了動態庫的靈活性,在版本升級時,同時要釋出新的應用程式才行。
(3)在動態庫的情況下,有兩個檔案,一個是引入庫(.LIB)檔案,一個是DLL檔案,引入庫檔案包含被DLL匯出的函式的名稱和位置,DLL包含實際的函式和資料,應用程式使用LIB檔案連結到所需要使用的DLL檔案,庫中的函式和資料並不複製到可執行檔案中,因此在應用程式的可執行檔案中,存放的不是被呼叫的函式程式碼,而是DLL中所要呼叫的函式的記憶體地址,這樣當一個或多個應用程式執行時再把程式程式碼和被呼叫的函式程式碼連結起來,從而節省了記憶體資源。從上面的說明可以看出,DLL檔案必須隨應用程式一起發行,否則應用程式將會產生錯誤。
參考這個:http://blog.sina.com.cn/s/blog_105817120102vzfl.html
關於執行緒的概念:
http://blog.sina.com.cn/s/blog_105817120102vzfl.html
把用高階程式設計語言書寫的源程式,翻譯成等價的計算機組合語言或機器語言書寫的目標程式的翻譯程式。編譯程式屬於採用生成性實現途徑實現的翻譯程式。 它以高階程式設計語言書寫的源程式作為輸入,而以組合語言或機器語言表示的目標程式作為輸出。編譯出的目標程式通常還要經歷執行階段,以便在執行程式的支援下執行, 加工初始資料,算出所需的計算結果。編譯程式的實現演算法較為複雜。這是因為它所翻譯的語句與目標語言的指令不是一一對應關係,而是一多對應關係;同時也因為它要處理遞 歸呼叫、動態儲存分配、多種資料型別,以及語句間的緊密依賴關係。但是,由於高階程式設計語言書寫的程式具有易讀、易移植和表達能力強等特點,編譯程式廣泛地用於 翻譯規模較大、複雜性較高、且需要高效執行的高階語言書寫的源程式。
按照vc6.0的模式,我們可以這麼理解:
-
編譯:當前原始碼編譯成二進位制目標檔案(.obj檔案);
.obj檔案,程式編譯時生成的中間程式碼檔案;目標檔案,一般是程式編譯後的二進位制檔案,OBJ只給出了程式的相對地址,而可執行檔案是絕對地址。
2.區別:OBJ檔案連結(即加入.link所包含的標頭檔案)後就生成EXE檔案。
可以說.obj檔案是.exe檔案的前身;
相關文章
- 配置pycharm 編譯器時遇到的一些問題PyCharm編譯
- LLVM之父分享發明編譯器的經驗 - hpcwireLVM編譯
- [非專業翻譯] Mapster - 對映配置驗證和編譯編譯
- nanoPI編譯核心的一些recordNaN編譯
- Eclipse配置反編譯Eclipse編譯
- ReactNative開發的一些經驗React
- 關於Canvas的一些經驗Canvas
- 【譯】新的 MSBuild 編輯體驗UI
- 全棧交叉編譯X86完成過程經驗分享全棧編譯
- 開發小程式的一些小經驗
- Ubuntu交叉編譯環境配置Ubuntu編譯
- 開發中的一些經驗總結
- 分享一些我自己的docker使用經驗Docker
- 記錄一些工程編譯問題編譯
- 記一次編譯GCC的經歷編譯GC
- 編譯執行、解釋執行的一些思考編譯
- [譯] Data Binding 庫使用的經驗教訓
- oracle資料庫開發的一些經驗Oracle資料庫
- openssl原始碼編譯及配置方法原始碼編譯
- nginx 編譯安裝與配置使用Nginx編譯
- OC和Swift混編經驗Swift
- Sublime Text3 自動編譯less 的配置編譯
- 已經編譯好的opencv QT creator直接使用編譯OpenCVQT
- 編譯Spring原始碼的步驟及一些問題編譯Spring原始碼
- 總結Django一些開發經驗Django
- 演進配置管理的七條經驗
- Xray使用的一些經驗分享(xray+burp的使用)
- GoLand編譯器配置代理和專案環境配置GoLand編譯
- 分享一些 Kafka 消費資料的小經驗Kafka
- windows下體驗quarkus原生編譯打包Windows編譯
- 一個有40年編碼經驗的老外程式設計師的職業經驗程式設計師
- [轉]:xmake編譯配置過程詳解編譯
- CTC+pytorch編譯配置warp-CTCPyTorch編譯
- Tinyx 交叉編譯配置檔案(arm版)編譯
- ecplise配置jad反編譯.class檔案編譯
- 微信小程式開發一些經驗微信小程式
- 「譯文」Google SRE 二十年的經驗教訓Go
- 內部業務系統的一些經驗總結
- 經驗篇:對商業分析的一些思考和感悟