程式編譯時生成的中間**檔案。目標檔案,一般是程式編譯後的二進位制檔案,再通過鏈結器(link.exe)和資源檔案鏈結就成可執行檔案了。obj只給出了程式的相對位址,而可執行檔案是絕對位址。[1]
這個問題不是很簡單,你只看到了檔案從源**到exe檔案這個流程中的一小部分。要詳細的深究這個問題,需要很多時間和精力。
資源鏈結很好理解,但鏈結器(link.exe)?
——鏈結器(link.exe)是鏈結.lib檔案、.obj目標檔案、.res;.lib檔案又稱之為導入庫檔案,只記錄了函式所在dll的位置。
.lib導入庫的概念:
.obj目標檔案的概念:
可見,在我們的程式語言和計算機中間多了乙個編譯器,我更形象的將它理解為我們與計算機之間的翻譯。翻譯做的事情,我必然看不懂,但它的工作成果就是obj、res、exe這些二進位制檔案;所有的翻譯,在某種程度上都存在欺騙的可能性...這是題外話,所以obj檔案是什麼?是計算機所能理解的二進位制**,是編譯成exe過程中需要的第一步、是ml.exe執行後的結果。
從表面上看.obj不能執行,但是.exe可以執行.還有他們的字尾名不同、.exe比.obj多了.lib、.res檔案;除此之外,要論述<.obj>
編譯執行和解釋執行:
這個問題是這些問題的原始問題,換句話說其他問題都是這個問題的延伸;如果抽象一下也很有意思的,編譯執行就好像是link.exe直接給了苦力一張它懂的紙條,我全部都苦力你幹什麼,幹完就完事;而解釋執行就好像給苦力陪了一台隨身攜帶的翻譯器,苦力勞作一下,翻譯器再告訴苦力下乙個命令,直到苦力將翻譯器中的所有命令都完成才罷休。
這個比喻也完美的解釋了「解釋執行能跨平台,而編譯執行卻不行」,因為後者直接給了一張紙,要麼苦力看得懂,要麼苦力看不懂,看不懂那就幹不了,這很正常(因為苦力也分種族)...而前者直接實現了「人工智慧」,苦力是**的人翻譯器就說**的話..速度的問題,也完美的解釋了,一張紙和翻譯器相比,當然前者更快...
什麼事obj檔案
程式編譯時生成的中間 檔案。目標檔案,一般是程式編譯後的二進位制檔案,再通過鏈結器 link.exe 和資源檔案鏈結就成可執行檔案了。obj只給出了程式的相對位址,而可執行檔案是絕對位址。1 這個問題不是很簡單,你只看到了檔案從源 到exe檔案這個流程中的一小部分。要詳細的深究這個問題,需要很多時間...
為什麼typeof(null)返回的是object
首先要知道,這並不是設計者希望出現的結果,這是乙個bug。後來也提出過修復這個bug的提案,但是由於這個bug影響的範圍太大,也就沒有及時更正,越到後面影響範圍也越廣,所以就不修復了。js中的基本資料型別都儲存在32位的二進位制單元當中,低三位的數字用於表示該資料的型別。低三位數字和表示型別的對應關...
Meshlab匯入obj檔案
位於vcglib wrap io trimesh 注 為meshlab中vcg的源 static int open openmeshtype m,const char filename,info oi if oi.mask 0 loadmask filename,oi meshlab在open之前有...