關於 c語言的編譯 和編譯後程式的執行

2021-05-24 21:50:55 字數 735 閱讀 2302

原來,一直不太明白這樣乙個問題:既然c語言是一種相對高階的語言,應該用c語言寫出的東西,經過編譯器編譯就可在任意機器上執行。

我今天試了一下在linux下編譯的c語言在windows下執行,但是都提示錯誤。

然後去網上查了一些資料,事實上如果你編寫的程式全是彙編或者純c語言,沒有用到任何第三方軟體或者和作業系統有關的庫函式,那麼你編譯完後,可以在同等硬體上執行。當然,你編譯的時候必須編譯成硬體認識的指令。【即必須使用相應的編譯器】。

但,事實上我們平常用c語言寫的一些應用程式會或多或少使用一些某些系統特有的函式庫。

這是因為ansi c是c語言的標準,但ansi c幾乎很難完成複雜程式的開發。任何c語言的編譯器都在ansi c的基礎上擴充, 如tc,vc等都對ansi c進行了擴充,加入了自己的規則和庫之類的。所以他們之間一般不具有通用性。此外在各個作業系統上的應用程式通常要呼叫相應的作業系統提供的藉口,這也為**的跨平台建立了一層障礙。

下面說一下什麼是庫函式:

庫函式是編譯器帶的一些函式,

作業系統提供最底層的系統呼叫,而庫函式是對這些系統呼叫的封裝。

因此,c語言是一種和硬體無關的語言,編譯成在那個平台上執行的程式這件事是由編譯器幹的。程式設計者不用考慮這些問題。

還有就是,我們為了提高程式開發效率,我們開發的程式一般在作業系統上跑,所以我們在編寫時用了一些其他別人編寫好的針對特殊系統的庫函式。這樣,就無意中限制了c語言的快平台性。

嘻嘻,我的簡單理解就是這樣。有什麼不對的,希望大家指點。

C語言程式編譯後的儲存區域區分

由c語言 文字檔案 形成可執行程式 二進位制檔案 需要經過編譯 彙編 連線三個階段。編譯過程把c語言文字檔案生成匯程式設計序,彙編過程把匯程式設計序形成二進位制機器 連線過程則將各個原始檔生成的二進位制機器 檔案組合成乙個檔案。c語言編寫的程式經過編譯 連線後,將形成乙個統一檔案,它由幾個部分組成。...

關於程式的編譯和鏈結

在此,我想多說關於程式編譯的一些規範和方法,一般來說,無論是c c 還是pas,首先要把原始檔編譯成中間 檔案,在windows下也就是 obj 檔案,unix下是 o 檔案,即 object file,這個動作叫做編譯 compile 然後再把大量的object file合成執行檔案,這個動作叫作...

C 編譯後的程式在Android執行

1.安裝交叉編譯器,交叉編譯器的安裝方法大致有下面幾條 debian ubuntu 系統可以直接輸入命令安裝 sudo apt install g arm linux gnueabihf 2.新建main.cpp檔案,內容如下 include 將類定義在命名空間中 namespace diy int...