什麼是運行時庫?我已閱讀this,因此我對它的目的有一個正確的理解,但是它是一個文件嗎?它是否可以像標準庫一樣明確包含?具體是什麼運行時庫?
回答
有靜態和動態(運行時)庫。
來自靜態庫的代碼在編譯時放入可執行文件中(鏈接器執行此操作)。所以這段代碼可能會膨脹你的可執行文件,但它在每臺計算機上都有相同的代碼。
當您使用動態庫(Windows中的.dll,Linux中的.so)時,該函數僅作爲鏈接存儲(從ABC.dll調用XYZ())。在執行二進制文件時,操作系統將這些庫加載到可執行文件的地址空間中並解析鏈接。所以你的可執行文件比較小,這個庫可以被許多程序使用。當這個庫存在缺陷時,每個程序只能替換一次。但是,這隻適用於如果庫的接口只是小心改變,否則 - 歡迎來到DLL地獄。
首先,它是概念:在目標平臺上提供語言功能所需的代碼。
即它是執行strlen
和feclearexcept
和ofstream::operator<<
所有其他標準庫函數的語言可用。
它也可能包含「膠水代碼」,例如確保您的'main'在程序啓動時被正確的參數調用,以及與目標OS的其他交互。
像許多概念,它有不同的「物理」表現(物理作爲一個文件即可)。他們依賴於語言的實現細節,但常見的有:編譯時可用
頭文件,包含內嵌的實現(如標準模板Libary)
靜態庫(.OBJ或.LIB )文件,包含已編譯的函數,並在鏈接期間包含在可執行文件中。
動態庫文件(.dll或.so)需要在執行過程中可用的文件
「特殊的東西編譯器或鏈接做」創建可執行
一個典型的C++時程序可能會看到「所有上述」。
靜態庫通常由C,C++或實現標準庫函數,其通常使用目標OS的fucntionality(例如,Windows CreateFile
爲fstreams)
的動態庫程序包(的大型工件裝配代碼創建)這些靜態庫作爲.dll或.so。
使用動態庫需要相應的運行要在目標平臺上安裝,但使用起來也減少了你的可執行文件,並從更新到您的運行時已安裝的應用效益的大小。
如上所述,這是實現依賴。可能有任何數量的附加文件(例如數據文件,配置文件,調試符號,圖標等)與運行時相關聯和包含在運行時中。
這裏的另一個重要方面是:語言提供了目標平臺的抽象,抽象層是在運行時實現的。
- 1. 什麼是「Microsoft C++ Visual運行時庫:運行時錯誤!」
- 2. 什麼是VB運行時?
- 3. 什麼是運行時間?
- 4. runAllManagedModulesForAllRequests =「false」的具體行爲是什麼?
- 5. 什麼是具體實現?
- 6. 具體是什麼線的
- 7. 什麼是具體指數
- 8. 什麼是Visual C運行庫?
- 9. 爲什麼silverlight庫在運行時v2.0.50727?
- 10. 「運行時間」究竟是什麼?
- 11. C++運行時是什麼意思?
- 12. 什麼是運行時錯誤?
- 13. 是什麼。載的)運行時間(
- 14. 什麼是運行時簽名?
- 15. 是什麼 - 做運行NPM命令時?
- 16. 什麼是Java中的「運行時類」?
- 17. 什麼是C++運行時概念?
- 18. 運行命令時,$是什麼意思?
- 19. 什麼是String.toCharArray()的運行時間?
- 20. 什麼是Windows Phone運行時?
- 21. 什麼是現代運行時?
- 22. 爲什麼NumberFormatException是運行時?
- 23. 運行Django時,'Reverse'是什麼意思?
- 24. 解決運行時庫衝突的好方法是什麼?
- 25. '以管理員身份運行'具體做什麼?
- 26. eval(parse(...))的危險具體是什麼?
- 27. OpenCPU中的會話:具體是什麼?
- 28. 什麼,具體是「Facebook的ID」?
- 29. 這是爲什麼運行?
- 30. 什麼是extract-min運行時間,爲什麼?
@ user0042感謝您的輸入,但是它是如何顯示實際運行時庫的?就像您可以自己閱讀的物理文件一樣,包括等等...... – Rocket
正如我所說的,我已經閱讀了有關該術語的內容。我只是喜歡他們的一些例子。 – Rocket
運行時庫是代碼(函數等)的集合,用戶程序(例如,您編寫的程序)需要它們才能正常工作。例如,在調用main()函數之前執行的C++標準庫和代碼通常是運行時庫的一部分 - 大多數C++程序在沒有它的情況下無法做任何有用的事情。運行時庫可能是一個單獨的可執行文件(例如,您的程序無法運行的Windows DLL窗口),或者鏈接器可能會在編譯時直接將代碼複製到可執行文件中,以便程序運行「獨立」或這些組合。可能性繼續 – Peter