java框架 動(dòng)態(tài)庫中如何調(diào)用靜態(tài)庫函數(shù)?
動(dòng)態(tài)庫中如何調(diào)用靜態(tài)庫函數(shù)?我們可以得出第一個(gè)結(jié)論:兩者都是靜態(tài)鏈接庫。當(dāng)有同名函數(shù)時(shí),鏈接會(huì)有多次定義符號(hào)的錯(cuò)誤!讓我們看看這兩個(gè)動(dòng)態(tài)庫的動(dòng)態(tài)鏈接庫。同一個(gè)LIBA libb生成動(dòng)態(tài)鏈接庫,不修改主
動(dòng)態(tài)庫中如何調(diào)用靜態(tài)庫函數(shù)?
我們可以得出第一個(gè)結(jié)論:兩者都是靜態(tài)鏈接庫。當(dāng)有同名函數(shù)時(shí),鏈接會(huì)有多次定義符號(hào)的錯(cuò)誤!讓我們看看這兩個(gè)動(dòng)態(tài)庫的動(dòng)態(tài)鏈接庫。同一個(gè)LIBA libb生成動(dòng)態(tài)鏈接庫,不修改主測(cè)試程序!或者:如果刪除動(dòng)態(tài)庫,這種編譯方法稱為動(dòng)態(tài)庫的隱式調(diào)用利巴索,運(yùn)行a.out時(shí),將出現(xiàn)找不到動(dòng)態(tài)庫的錯(cuò)誤。這種情況也可以稱為加載時(shí)間鏈接!靜態(tài)庫屬于編譯時(shí)鏈接!第二個(gè)結(jié)論是:如果它們都是動(dòng)態(tài)庫并且被隱式調(diào)用,則輸出結(jié)果與動(dòng)態(tài)庫的順序有關(guān)。繼續(xù)看動(dòng)態(tài)加載動(dòng)態(tài)庫。修改主測(cè)試程序還可以得出結(jié)論,如果動(dòng)態(tài)鏈接庫沒有add library link選項(xiàng),則函數(shù)調(diào)用是正確的add library路徑,并且?guī)炻窂降捻樞驅(qū)⑹侵髀窂?!左?cè)將覆蓋右側(cè)。此外,只有其中一個(gè)鏈接時(shí),它才會(huì)生效,例如:1。靜態(tài)鏈接庫是將(LIB)文件中使用的函數(shù)代碼直接鏈接到目標(biāo)程序,程序運(yùn)行時(shí)不需要其他庫文件。動(dòng)態(tài)鏈接是將調(diào)用函數(shù)的文件模塊(DLL)和調(diào)用函數(shù)在文件中的位置鏈接到目標(biāo)程序,這樣程序在需要從DLL中找到相應(yīng)的函數(shù)代碼時(shí),就需要相應(yīng)DLL文件的支持。三。靜態(tài)鏈接庫的優(yōu)點(diǎn)是:(1)代碼加載速度快,執(zhí)行速度略快于動(dòng)態(tài)鏈接庫;(2)只需保證有正確的鏈接即可。Lib文件在開發(fā)人員的計(jì)算機(jī)上,不需要考慮它的存在和版本。Lib文件在用戶計(jì)算機(jī)上以二進(jìn)制形式發(fā)布程序時(shí),可以避免DLL地獄等問題。DLL的優(yōu)點(diǎn)是:(1)節(jié)省內(nèi)存,減少頁面交換;(2)DLL文件獨(dú)立于exe文件。只要輸出接口保持不變(即名稱、參數(shù)、返回值類型和調(diào)用約定保持不變),DLL文件的替換不會(huì)對(duì)exe文件產(chǎn)生任何影響,從而大大提高了可維護(hù)性和可擴(kuò)展性;(3) DLL文件具有節(jié)省內(nèi)存、減少頁面交換的優(yōu)點(diǎn),用不同編程語言編寫的程序只要遵循函數(shù)調(diào)用約定,就可以調(diào)用同一個(gè)DLL函數(shù);(4)適合于大規(guī)模軟件開發(fā),使開發(fā)過程獨(dú)立,耦合性小促進(jìn)不同開發(fā)人員和開發(fā)組織之間的開發(fā)和測(cè)試。