導航:首頁 > 源碼編譯 > 編譯總是那一個

編譯總是那一個

發布時間:2023-01-01 04:08:45

⑴ arm-linux-gcc已安裝,可是編譯是總是出現arm-none-linux-gnueabi-gcc:命令未找到

cc1: error: invalid option `abi=apcs-gnu'

你的交叉編譯器有問題吧……

看看這個解決辦法:
http://blog.sina.com.cn/s/blog_538376bd01000a2c.html

不過要我說,弄嵌入式首先要會自己做交叉編譯工具,直接拿別人的,出問題只能在那裡傻坐著。
其實自己編譯個最新版本的交叉編譯工具,我的 core 2 dou T5450 其實也就需要三個小時搞定。當然我這是全自動的,你手動半天也夠了吧?
自己編譯一個 gcc 4.4.2 + binutils 2.20.1 + glibc 2.11 + kernel-header 2.6.33 也不需要多麻煩吧?
至少自己編譯起程序來不會出現各種 XXOO 的問題。

⑵ 編譯程序的工作過程一般可以劃分為哪5個基本階段,還自始至終伴隨進行哪兩項工作

1、編譯程序把一個源程序翻譯成目標程序的工作過程分為五個階段:詞法分析;語法分析;中間代碼生成;代碼優化;目標代碼生成。

2、編譯程序的工作過程一般自始至終伴隨進行信息表管理和出錯處理兩項工作。

主要是進行詞法分析和語法分析,又稱為源程序分析,分析過程中發現有語法錯誤,給出提示信息。

(2)編譯總是那一個擴展閱讀:

解釋程序是一種語言處理程序,在詞法、語法和語義分析方面與編譯程序的工作原理基本相同,但在運行用戶程序時,它直接執行源程序或源程序的內部形式(中間代碼)。因此,解釋程序並不產生目標程序,這是它和編譯程序的主要區別。解釋程序的工作過程如下:

1、由總控程序完成初始化工作。

2、依次從源程序中取出一條語句進行語法檢查,如有錯,輸出錯誤信息;如果通過了語法檢查,則根據語句翻澤成相應的指令並執行它。

3、檢查源程序是否已經全部解釋執行完畢,如果未完成則繼續解釋並執行下一條語句,直到全部語句都處理完畢。

⑶ C語言編譯原理是什麼

編譯共分為四個階段:預處理階段、編譯階段、匯編階段、鏈接階段。

1、預處理階段:

主要工作是將頭文件插入到所寫的代碼中,生成擴展名為「.i」的文件替換原來的擴展名為「.c」的文件,但是原來的文件仍然保留,只是執行過程中的實際文件發生了改變。(這里所說的替換並不是指原來的文件被刪除)

2、匯編階段:

插入匯編語言程序,將代碼翻譯成匯編語言。編譯器首先要檢查代碼的規范性、是否有語法錯誤等,以確定代碼的實際要做的工作,在檢查無誤後,編譯器把代碼翻譯成匯編語言,同時將擴展名為「.i」的文件翻譯成擴展名為「.s」的文件。

3、編譯階段:

將匯編語言翻譯成機器語言指令,並將指令打包封存成可重定位目標程序的格式,將擴展名為「.s」的文件翻譯成擴展名為「.o」的二進制文件。

4、鏈接階段:

在示例代碼中,改代碼文件調用了標准庫中printf函數。而printf函數的實際存儲位置是一個單獨編譯的目標文件(編譯的結果也是擴展名為「.o」的文件),所以此時主函數調用的時候,需要將該文件(即printf函數所在的編譯文件)與hello world文件整合到一起,此時鏈接器就可以大顯神通了,將兩個文件合並後生成一個可執行目標文件。

⑷ 一個典型的編譯程序通常由哪些部分組成各部分的主要功能是什麼

通常由七個部分組成。分別是:詞法分析、語法分析、語義分析和中間代碼生成、優化、目標代碼生成以及表格和表格管理、出錯處理。
各自功能是:
1.詞法分析:輸入源程序,對構成源程序的字元串進行掃描和分解,識別出一個個單詞(也稱單詞符號,或簡稱符號)。在詞法分析階段工作所依循的是語言的詞法規則;描述詞法規則的有效工具是正規式和有限自動機。
2.語法分析:在詞法分析的基礎上,根據語言的語法規則,把單詞符號串組成各類語法單位。具體的說,語法分析是在單詞流的基礎上建立一個層次結構——建立語法樹。
3.語義分析和中間代碼生成:語義分析利用語法分析階段確定的層次結構來識別表達式和語句中的操作信息及類型信息;中間代碼生成階段將產生的源程序的一個顯式中間表示,這種中間表示可以看成是某種抽象程序,通常是與平台無關的,(可用三地址碼和四元式表示)。
4.優化:試圖改進中間代碼,以產生執行速度較快的機器代碼。
5.目標代碼生成:生成可重定位的機器代碼或匯編代碼。
6.表格和表格管理:編譯程序在工作過程中需要保持一系列的表格,以登記源程序的各類信息和編譯各階段的進展情況。
7.出錯處理:編譯程序對源程序中的錯誤進行處理,應最大限度地發現源程序中的各種錯誤,准確地指出錯誤的性質和發生錯誤的地點,並且將錯誤所造成的影響限制在盡可能小的范圍內,使得源程序的其餘部分能繼續被編譯下去,以便進一步發現其他可能的錯誤。通常編譯過程中每個階段都可能檢測出錯誤,其中,絕大多數數錯誤可以在編譯的前三階段檢測出來。且源程序中的錯誤通常分為語法錯誤和語義錯誤兩大類。出錯處理就是為了處理以上的錯誤情況。

⑸ 請高手幫忙看下出的什麼問題,為什麼編譯總是過不去,實在找不出問題在哪fatal error LNK1120: 1 unresolv

LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain
從這個看出是未解決的外部符號。
就是說,你設置了_WinMain,但是沒解決這個符號。
這個符號是WINDOWS程序的入口,而你的入口是main()函數,所以,你需要修改你的工程。打開Project->settings.選擇Link,將最下面編輯框裡面的子系統選項/subsystem:windows (Windows程序) 改成/subsystem:console (控制台程序),然後重新編譯就可以了。

⑹ 我用vc++6.0編譯總是提示有一個錯誤,我實在找不出來了,所以求助一下,可有高手幫助我

這通常是編譯器路徑設置有問題。
你在編譯器 安裝文件中 找一下 VCVARS32.BAT 批命令程序,運行一下它,看能否解決問題。
例如,在 C盤查找。在提示符 C:\> 下拍命令: dir VCVARS32.BAT /s
就會找出 它,你把它 到 你的程序 所在的文件夾,運行一次它。
接著,編譯 程序,例如拍入 CL my_porg.c 即可。

⑺ C++編譯時,是從哪一個cpp開始的,然後各cpp的編譯順序是如何定的

編譯順序由你在編譯設置里決定
其實編譯順序並不重要
最終的連接過程是產生可執行文件的最終步驟,只要保證連接時所有的目標文件都存在就行了

比如一個小程序包括兩個文件
//main.cpp
extern int a;
int main(void){
printf("%d\n",a);
a=5;
printf("%d\n",a);
}
//var.cpp
int a=2;
----
gcc -c main.cpp
gcc -c var.cpp//這兩步可以換過來
gcc main.o var.o//這兩個參數也可以換過來

輸出
2
5

⑻ C++總是編譯錯誤,哪位高人指點一下

21行,少一個int
for(int i=0; i<P; i++)

⑼ codeblocks為什麼一個程序下的倆個文件,編譯的時候總是編譯另外一個

codeblocks 是按項目來的,project。
你要看下當前編譯項目選擇是否正確。

閱讀全文

與編譯總是那一個相關的資料

熱點內容
電腦怎麼找到雲伺服器 瀏覽:865
微信怎麼發應用app 瀏覽:776
花生殼dns伺服器地址 瀏覽:648
squad伺服器一般什麼時候人多 瀏覽:479
程序員戰門課 瀏覽:474
config保存伺服器地址 瀏覽:317
預訂網吧座位的app叫什麼 瀏覽:416
香港伺服器主機地址 瀏覽:640
網店美工pdf 瀏覽:447
一堆文件夾怎麼弄出來 瀏覽:743
博途如何編譯硬體 瀏覽:418
fortran程序pdf 瀏覽:504
電池消耗演算法 瀏覽:394
伺服器中斷連接怎麼處理 瀏覽:222
上世紀互聯網不發達程序員很難 瀏覽:841
語音識別android開源 瀏覽:762
地埋式垃圾壓縮中轉站 瀏覽:902
apachehttpdlinux 瀏覽:944
快遞員中通app預付款是什麼 瀏覽:843
java路徑轉義 瀏覽:857