ios軟件分發(fā)源碼搭建教程手把手 risc-v架構(gòu)為啥能開源?
risc-v架構(gòu)為啥能開源?RISC-V架構(gòu)是開源的,因為它采用開源許可,所以其他開發(fā)者可以使用、修改和分發(fā)源代碼,從而有效地促進(jìn)其發(fā)展。如何在linux平臺生成靜態(tài)鏈接庫與動態(tài)鏈接庫?動態(tài)庫和靜態(tài)庫
risc-v架構(gòu)為啥能開源?
RISC-V架構(gòu)是開源的,因為它采用開源許可,所以其他開發(fā)者可以使用、修改和分發(fā)源代碼,從而有效地促進(jìn)其發(fā)展。
如何在linux平臺生成靜態(tài)鏈接庫與動態(tài)鏈接庫?
動態(tài)庫和靜態(tài)庫
在Win下,動態(tài)庫以。dll和靜態(tài)庫以。lib。
在Linux下,動態(tài)庫文件以。靜態(tài)庫以。a.
在Mac下,動態(tài)庫以。dylib和靜態(tài)庫以。a.
動態(tài)圖書館的利與弊
動態(tài)函數(shù)庫在編譯時并沒有編譯成目標(biāo)代碼,只有在你的程序執(zhí)行相關(guān)函數(shù)時才會調(diào)用函數(shù)庫中對應(yīng)的函數(shù),所以動態(tài)函數(shù)庫生成的可執(zhí)行文件比較小。因為函數(shù)庫不是集成到你的程序中,而是在程序運行時動態(tài)應(yīng)用和調(diào)用的,所以程序的運行環(huán)境中必須提供相應(yīng)的庫。動態(tài)函數(shù)庫的改變不影響你的程序,升級動態(tài)函數(shù)庫更方便。
當(dāng)一個程序在運行時調(diào)用一個動態(tài)鏈接庫函數(shù)時,操作系統(tǒng)首先查看所有正在運行的進(jìn)程,看是否有人加載了這個庫。有就直接用。如果沒有,它將被加載。這樣做的第一個好處是節(jié)省內(nèi)存空間。動態(tài)調(diào)入意味著要等到需要的時候,而不是不管用不用都先放在內(nèi)存里。
如果我想升級一些軟件。如果升級位置在dll中,則軟件的其他部分不需要重新編譯鏈接。所以升級方便。
靜態(tài)庫的優(yōu)點和缺點
靜態(tài)函數(shù)庫編譯的文件比較大,因為整個函數(shù)庫在編譯的時候會集成到目標(biāo)代碼中,它的優(yōu)勢很明顯,就是編譯的執(zhí)行程序不需要外部函數(shù)庫的支持,因為使用的函數(shù)都已經(jīng)編譯好了。當(dāng)然這也會是他的缺點,因為如果你的靜態(tài)鏈接函數(shù)庫發(fā)生了變化,那么你的程序就必須重新編譯。
代碼更加精簡,因為不需要進(jìn)行版本檢查。
當(dāng)程序被分發(fā)時,文件的數(shù)量很少,因為它是靜態(tài)鏈接到源文件的。
僅編譯庫中使用的部分,而不是整個庫。
生成的二進(jìn)制文件會占用更多空間。
重復(fù)的庫可能出現(xiàn)在多個進(jìn)程中,浪費內(nèi)存。
如果庫內(nèi)部更新,二進(jìn)制文件需要重新編譯。
Linu臺的靜態(tài)庫
靜態(tài)庫的生成
靜態(tài)庫的鏈接
Linu臺的動態(tài)庫
動態(tài)庫的生成
動態(tài)庫的鏈接
Windows平臺的靜態(tài)庫
靜態(tài)庫/MT的生成使用編譯來創(chuàng)建多線程可執(zhí)行文件。生成靜態(tài)庫lib。
靜態(tài)庫的鏈接。使用鏈接庫在代碼開頭添加,第二行是鏈接庫中要調(diào)用的函數(shù):
2.把要調(diào)用的鏈接庫的lib放到項目源代碼中,進(jìn)行編譯。你不 編譯時不需要動態(tài)鏈接庫。在這里,將靜態(tài)部件庫編譯成Exe,但是動態(tài)庫dll沒用。)
3.運行前將dll放在exe目錄中。
Windows平臺的動態(tài)庫
動態(tài)庫/MD的生成使用編譯來創(chuàng)建多線程dll。生成動態(tài)庫。
動態(tài)庫的鏈接1,LoadLibrary(或者M(jìn)FC的AfxLoadLibrary),加載動態(tài)庫。
,獲取要引入的函數(shù),將符號名或標(biāo)識號轉(zhuǎn)換成DLL的內(nèi)部地址。
(或MFC的AfxFreeLibrary),并釋放動態(tài)鏈接庫。