Re: [問題] 請問為什麼Win和Linux執行檔不能互通?
※ 引述《pluseus (回憶真美麗)》之銘言:
: 問題(Question):
: 抱歉問一個蠢問題
: 請問為什麼在Windows OS下compile過後的執行檔(.exe)
: 拿到「同一台」機器下的Linux OS,為什麼不能執行?
: 而要在Linux下source code重新compile才能使用
: 我會有這個問題
: 是因為我的理解是,source code經過compile過後
: 就變成for某種cpu的機器碼了(例如x86機器碼)
: 而Windows OS和Linux OS,因為是同一台機器,假如也都是使用相同的x86機器碼
: 但是為什麼執行檔在不同OS不能互通呢?
: 謝謝! ^^
可以參考這篇 編譯、組譯、直譯 的解釋
http://tw.knowledge.yahoo.com/question/question?qid=1106101311818
組譯:將組合語言轉成機械語言稱為組譯 (Assembling) ,
組合語言(assembly)是一種非常接近機器碼的語言。所以將組合語言轉成機器碼的工具
稱為組譯器(assembler),反過來將機器碼轉成組合語言的工具稱為反組譯器(
dissembler)。
高階語言的執行方式有編譯式與直譯式兩種
編譯:編譯式的語言是將原始程式碼透過編譯器 (Compiler) 轉成機械碼,再直接執行機
械碼。主要的優點是速度快,並可一次找出程式中不合文法的部份。編譯式的語言如 C,
FORTRAN, COBOL 等均是。
直譯:直譯式的語言是利用直譯器 (Interpreter) 對原始程式碼一邊讀解,一邊執行。
主要的優點是對於初學者較易於使用。直譯式的語言如 Basic, dBASE III 及其他
Script Language 等。
---------------------------------------------------------------------------
而原PO問的為什麼compile後的執行檔不能直接在win/linux-like環境下通用
因為c/c++就是編譯式語言,會根據不同的作業系統環境使用不同的底層API跟硬體溝通
就像win跟linux 同樣遵守OSI Model, 但實作方法也不同
也因為有跨平台的需求,才會衍生發展出java這類透過vm解決環境不同的語言
以上個人觀念有錯的話 請給予指教 謝謝:)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.240.193.182
推
07/09 10:11, , 1F
07/09 10:11, 1F
推
07/09 12:02, , 2F
07/09 12:02, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 4 篇):