精華區beta Programming 關於我們 聯絡資訊
==> gracegirl.bbs@bbs.cs.nthu.edu.tw (甜靜女孩) 提到: > 這個編譯器疑惑已經困擾我很多年了,始終無法得到答案。 > Intel對其處理器推出編譯器,理論上不是不管是哪一種作業系統的話 > 用這個編譯器所編譯的程式就可以跑嗎? Q: 對處理器推出編譯器 A: 針對特定處理器的編譯器: architecture 不同, 指令各異, 適合的最佳化技巧也會有差異. 再經過組譯, 指令都不一樣了, 自然不能跨 target 執行. 妳說的 icc 就有"for多種OS"的版本, target 都是 x86 系列的 CPU, 至於能不能在 Unix 上編成 給 Windows 跑的程式, 我就不知道了. 倒也不是不能, (例如 cygwin+gcc), 後面再解釋. Q: 理論上不是不管是哪一種作業系統... A: 平常講某某某 platform 的編譯器怎樣怎樣, 其中的 platform 包括 architecture 也包括 OS, architecture 前面提過了, OS 的部分包括了是 ABI(application binary interface), 目的檔的格式(Windows用COFF, Linux elf, Unix a.out, etc...) system call(包括一些 IO), library 等等等 程式要跑其實也不一定要有 OS (i.e. 妳後面提到的 8051), 但至少 ABI 要相容. 但是這樣的系統太簡單了, 做不了多少事, 所以加上 linker/loader, 於是就要定目的檔的格式, 再複雜一點, scheduler, service routines... 另一方面, 一個編譯器除了 基本地能夠把高階語言轉成組語以外, 它還會提供 library. 不少人玩過 ARM 還是 XXX 的版子, 可以觀察 bootstrap 編 Linux 的過程. 先找來 binutilities, OS 的 system headers, 然後 cross compile gcc, 有可能, 另外要重編 libgcc 或是 其他 library, 然後才編 kernel. 然後編 applications或是 妳的程式, 最後才 load 到系統上跑. "為什麼我們無法直接使用intel的編譯器"? 問得蠻奇怪的, 也就是我是覺得蠻 nonsense 的. > 像8051那種單晶片不是只要是晶片製造商提供編譯器就可以了嗎? > 難道是說如果我想要在window上跑, > 一定要用for window的編譯器嗎? 在linux跑就要用for linux的編譯器 ? cross compile 的時候我們至少會分 build machine 和 target machine 我可以在 cygwin (under Windows) 上 cross compile 出可以在 linux 跑 的程式, 這樣不知道有沒有回答妳的問題? > 那早期的DOS呢?難道過去intel也有推出for dos的編譯器? > intel是分別針對window、linux推出編譯器給我們程式開發者使用? > 這樣感覺好像怪怪的,既然他是原始製造商,不是他就有指令集與編譯器提供給作 > 業系統開發業者(比如微軟、linux社群)使用嗎? 那為什麼我們無法直接使用intel > 的編譯器,反而要脫褲子放屁透過for window與for linux的編譯器才能跑? > 而且for window與 for linux 的編譯器到底是CPU 製造商就可以提供還是一定要 > 透過作業系統開發業者提供? Borland, 妳說它是賣 CPU 的還是賣 OS 的? 都不是. 只是賣 CPU 的掌握 architecture, 賣 OS 的掌握 platform, 一方面技術上有優勢, 另一方面 CPU 或 OS 要賣得出去, 也要靠軟體支援, 所以多會一併連編譯器也做了. -- 有錯請指正 & hope it helps~ -- ☆ [Origin:椰林風情] [From: 220-135-20-49.hinet-ip.hine] [Login: **] [Post: 13]