天天看點

keil5編譯時報錯error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.的問題解決方法

keil5編譯時報錯error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.的問題解決方法

遇到這個問題的小夥伴們不要急,跟着我做,讓我們來一步一步解決吧!

首先我們通過有道翻譯,如下圖:

keil5編譯時報錯error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.的問題解決方法

來看看section matches selector又是什麼意思

keil5編譯時報錯error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.的問題解決方法
keil5編譯時報錯error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.的問題解決方法
keil5編譯時報錯error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.的問題解決方法
keil5編譯時報錯error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.的問題解決方法
keil5編譯時報錯error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.的問題解決方法

ps:每個小括号都是解答前面術詞或句子的意思。

通過翻譯我們知道這個錯誤是由于有多個“部分(段)比對選擇器”(用于段配置設定的代碼檔案)同時存在(通過這句話“不能都是第一/最後”我們能知道是由于它們同時存在是以出問題了),或是檔案裡的内容(代碼)起的作用是相同的(作用相同,起了沖突),是以導緻了這個錯誤。

部分比對選擇器說的是段配置設定選擇器,這個選擇器說的是那些起到記憶體配置設定(選擇)作用的檔案。

一般來講出現這種錯誤是因為有多個起段配置設定作用的檔案裡的内容相同了,是以導緻編譯時,這些起配置并具有啟動作用的檔案起沖突了(重複了),這些檔案一般都是字尾為.s的啟動代碼檔案。

那既然我們知道這個部分比對選擇器就是啟動代碼檔案,那根據keil5報的錯誤,我們可以知道,這個錯誤是因為我們有多個啟動代碼檔案,它們同時存在在同一個工程裡才導緻的錯誤。那麼我們就來解決這個問題吧!

是以,如果添加了多個啟動代碼就會出現這種情況,如下圖:

keil5編譯時報錯error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.的問題解決方法

我有兩個啟動代碼檔案,一個是S3C2440.s,一個是2440init.s。

可以看到,現在它們都被我添加到工程裡了,下面也報出了這個錯誤。

那按照我們的方法試着将其中一個去掉,然後再編譯連結看看能不能成功通過,結果如下圖:

keil5編譯時報錯error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.的問題解決方法

這可以看到,我去掉了S3C2440.s這個啟動代碼,隻用一個啟動代碼檔案2440init.s,但是編譯時又給我報錯了,不用急,我們先去翻譯一下這個錯誤是啥意思先,如下圖:

keil5編譯時報錯error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.的問題解決方法

我們可以看到,這裡說在我們的2440init.s檔案通過編譯生成的2440init.o中,用了兩個未定義的辨別符(函數或變量),那目标檔案2440init.o我們肯定是不會先去看的,我們先去看看2440init.s檔案,看看是哪裡用了,如下圖:

不知道怎麼找了吧,不用急,這裡教你們怎麼在工程裡使用關鍵字搜尋你想要的。

打開2440init.s檔案,按Ctrl+F,也可以點選Edit–>Find,在彈出的視窗最上方頁籤欄點選Find in Files,如下圖:

keil5編譯時報錯error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.的問題解決方法

在彈出的視窗最上方頁籤欄點選Find in Files,在 Find what 裡輸入你想找的關鍵字,然後點選 Find All。

這裡我們就輸入我們想要找到的那個辨別符就行了,如下圖:

keil5編譯時報錯error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.的問題解決方法

然後下面就會顯示找到的資訊,它們都在哪裡出現過,輕按兩下任意一條都能跳到它出現的位置。

果然!這裡我們可以看到确實兩條沒有定義的辨別符都在這裡被引用了!而且從上面的注釋可以看出,這兩個辨別符還是從其他檔案引進來用的!如下圖:

keil5編譯時報錯error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.的問題解決方法

那它們是在哪裡被定義的呢~?

哦~!我記起來了,我還有一個配套的檔案忘記添加進來了,這個啟動代碼還需要一個檔案才行,它倆是配套形成啟動檔案的!

那檔案是2440slib.s趕緊把它加進來再編譯看看!如下圖:

keil5編譯時報錯error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.的問題解決方法

果然!通過了!沒有錯誤,那我們就再去2440slib.s檔案裡搜尋一下這兩個标記符,看看是不是在這裡定義的!驗證一波!如下圖:

keil5編譯時報錯error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.的問題解決方法
keil5編譯時報錯error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.的問題解決方法

果然就是在這裡面定義的兩個函數!而且還挨在一起!

那麼,接下來我們就換另外那個啟動代碼來試試看吧,看看能不能編譯通過吧!如下圖:

keil5編譯時報錯error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.的問題解決方法

耶✌!很順利的就通過了!沒有錯誤!

總結:去掉工程裡多餘的啟動代碼,留下一個啟動代碼就行,最好就用建立項目時自動添加的啟動代碼就行!

注意:啟動代碼要用對應晶片類型一緻的,别拿了其他晶片的啟動代碼用在另一個晶片上,那樣又會有其他的錯誤哦!

對了!附加一個添加和移除工程内檔案的操作教程給你們,操作步驟如下圖:

添加目錄操作

選中右鍵

keil5編譯時報錯error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.的問題解決方法
keil5編譯時報錯error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.的問題解決方法

添加檔案操作

選中右鍵

keil5編譯時報錯error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.的問題解決方法
keil5編譯時報錯error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.的問題解決方法

删除檔案操作

選中右鍵

keil5編譯時報錯error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.的問題解決方法
keil5編譯時報錯error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.的問題解決方法