[問題] 請問為什麼Win和Linux執行檔不能互通?

看板C_and_CPP作者 (回憶真美麗)時間12年前 (2013/07/03 12:14), 編輯推噓10(10019)
留言29則, 14人參與, 最新討論串1/4 (看更多)
問題(Question): 抱歉問一個蠢問題 請問為什麼在Windows OS下compile過後的執行檔(.exe) 拿到「同一台」機器下的Linux OS,為什麼不能執行? 而要在Linux下source code重新compile才能使用 我會有這個問題 是因為我的理解是,source code經過compile過後 就變成for某種cpu的機器碼了(例如x86機器碼) 而Windows OS和Linux OS,因為是同一台機器,假如也都是使用相同的x86機器碼 但是為什麼執行檔在不同OS不能互通呢? 謝謝! ^^ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.109.113.225 ※ 編輯: pluseus 來自: 140.109.113.225 (07/03 12:17)

07/03 12:27, , 1F
binary格式不同 & 呼叫到很多系統服務
07/03 12:27, 1F

07/03 12:33, , 2F
這時候又要推薦"程式設計師的自我修養"這本書了~XD
07/03 12:33, 2F

07/03 12:34, , 3F
我記得好像是ABI不相容相關的章節有講@@? (有錯請指正XD)
07/03 12:34, 3F

07/03 12:40, , 4F
你要硬上可以試試用 wine 橋接
07/03 12:40, 4F

07/03 12:50, , 5F
PE vs coff ....
07/03 12:50, 5F

07/03 12:51, , 6F
windows.h vs X11..
07/03 12:51, 6F

07/03 12:52, , 7F
gstreamer vs directShow ....太多了 打不完
07/03 12:52, 7F
M大打的看不懂 @@" 不過h大打的大概能想像 系統服務像是程式在執行期配置記憶體是透過OS來完成 另外我會去找d大推薦的那本書來看 anyway,謝謝幾位的解答! ※ 編輯: pluseus 來自: 140.109.113.225 (07/03 13:00)

07/03 14:12, , 8F
你是大一新生嗎?或是還沒上大學的高中生? 會這樣問
07/03 14:12, 8F

07/03 14:13, , 9F
不要虧你 只是好奇 這種應該算是非常基礎的問題 怎麼不會
07/03 14:13, 9F
Yeap, I know it's a question quite fundamental and stupid. I have said it in my post first line. 但是你不該很本位地把所有上來問問題的人都想成是資訊相關背景出身的人 我問了一個歷史很簡單的問題,所以我必須要是一個歷史系的學生? 還是我要是一個還沒上大學的高中生? 不是每個寫程式的人都詳細瞭解編譯器編譯時做了甚麼,不是嗎? 我覺得你都沒有看我的問題敘述 我有打為什麼我會有這樣的問題 我的思路很簡單,因為編譯器要把source code翻譯成cpu看得懂的機器語言 而同一台機器所需要機器語言是相同的 雖然是在不同OS編譯,但最後的所生成的執行檔的目標是相同的 所以我有這個問題,為什麼不同OS編譯下的執行檔不能互通 當然我的想法過於簡化 中間省略掉很多 而中間省略掉的部分 就是我不知道的部分、希望要問的地方 如果您願意提供一點方向 就算是告訴我哪裡有答案、要我自己去查 我都會很感謝 12:34,donby先生推薦了「程式設計師的自我修養」這本書 我13:40就衝到台北重慶南路天瓏去買了 http://img834.imageshack.us/img834/6606/l0un.jpg
不論如何,謝謝你下面的解答

07/03 14:14, , 10F
就一卡車的東西都不一樣 就沒辦法執行 先是載入格式就不同
07/03 14:14, 10F

07/03 14:14, , 11F
再來是系統api層也不同 除非靠wine 不然搞不懂怎麼能互通
07/03 14:14, 11F

07/03 14:15, , 12F
就算是JAVA或是c# MONO跨平台實做 牽涉到os相關的功能
07/03 14:15, 12F

07/03 14:15, , 13F
也是會有一堆問題需要相容修正 不是同X86就ok
07/03 14:15, 13F

07/03 14:16, , 14F
會有WIN32編出的exe執行擋 怎麼不能拿去linux上跑的疑問
07/03 14:16, 14F

07/03 14:16, , 15F
讓我還滿訝異的 靠WINE 其實如果API沒支援到 一樣有問題
07/03 14:16, 15F

07/03 14:32, , 16F
LINUX->ELF格式不同 WIN->?
07/03 14:32, 16F
※ 編輯: pluseus 來自: 140.109.113.225 (07/03 15:29)

07/03 16:35, , 17F
火氣很大喔。
07/03 16:35, 17F

07/03 17:13, , 18F
罵你的才是比較會回答你的人,要我說的話,google 就可以
07/03 17:13, 18F
罵?請問您覺得我的問題有那裡任何不妥的地方,需要被「罵」嗎? → purpose:找到答案了,一堆人問過的問題 07/03 17:14

07/03 19:01, , 19F
不要起爭議啦~XD 話說這本書滿不錯的~
07/03 19:01, 19F

07/03 19:01, , 20F
雖然我還是有很多地方都不懂XD
07/03 19:01, 20F
謝謝您推薦的書,I am reading the book. 書本P4開宗就講了那書本要探討的問題之一:「不同的編譯器(Microsoft VC、GCC)和不同 平台(x86、SPARC、MIPC、ARM),以及不同的作業系統(Windows、Linux、UNIX、 Solars),最終編譯出來的結果一樣嗎?為什麼?」 正好是我要的!非常謝謝!

07/03 20:10, , 21F
這問題哪裡蠢了 問問看板上有多少人能回答的正確XDDD
07/03 20:10, 21F

07/03 20:45, , 22F
你寫的程式是交付給OS跑不是機器
07/03 20:45, 22F
謝謝您的一句話,讓我豁然開朗 → maerdimer:那麼 why 不能問? 人家都說只是 curiosity 了 07/03 20:49 ※ 編輯: pluseus 來自: 220.136.227.160 (07/03 21:47)

07/03 21:48, , 23F
問問題,得到東西才是重點,就這樣
07/03 21:48, 23F
是的,所以我還是非常感謝的 :) ※ 編輯: pluseus 來自: 220.136.227.160 (07/03 21:50)

07/03 22:35, , 24F
C#編出來的執行檔(exe)是不是能在Linux上跑??
07/03 22:35, 24F

07/04 00:30, , 25F
沒有native call的話,可以
07/04 00:30, 25F

07/04 16:45, , 26F
我覺得原po問問題的態度沒有很糟糕阿
07/04 16:45, 26F

07/04 16:46, , 27F
是我太遲鈍了嗎= =
07/04 16:46, 27F

07/05 11:12, , 28F
轉成電腦看懂的機械碼是相同的,但要人看還是會透過OS
07/05 11:12, 28F

07/05 11:13, , 29F
所以只好拉不同作業系統所需要的檔案來編譯,就..不相容了
07/05 11:13, 29F
文章代碼(AID): #1HqwKlny (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1HqwKlny (C_and_CPP)