交叉編譯環境以及開發板上-/bin/sh: ./hello: not found 轉載自 http://blankboy.72pines.com

來源:互聯網
上載者:User
交叉編譯環境以及開發板上-/bin/sh: ./hello: not found

目標板是S3C2440.至於交叉編譯環境的搭建就不多說了,網上很多教程.

搭建好了交叉編譯環境後,第一件事就是傳說中的”Hello,World!”.

一. 主機編譯環節

我使用的系統是ubuntu10.04,搭建好交叉編譯環境後,終端輸入arm-linux-gcc -v能夠正常顯示版本資訊,但是輸入sudo arm-linux-gcc -v後卻顯示命令無法找到.

我試過很多種方法,比如sudo -s切換到root後,編輯$PATH,將編譯器路徑加入.然後exit到普通使用者.仍然不能執行sudo arm-linux-gcc -v. 這裡如果哪位大牛知道是什麼原因的可以留言告訴我,謝謝:)

由於編譯.c的檔案後,要產生新的檔案,因此要super的許可權.又不能使用sudo arm-linux-gcc,於是可以先sudo -s到root使用者,再使用arm-liunux-gcc來進行編譯.

二. 目標板執行環節

我是使用FTP在主機和目標板之間傳送檔案.傳送過去後要注意改變許可權.

這裡要注意幾點:

1. 要確定ftp過來後的檔案的預設的存放路徑.這個只要在目標機的終端機上確認下即可.(這個地方沒有確認可能就會顯示找不到命令)

2. 傳送過來的檔案要更改許可權才能運行.可以用:

chmod 777 hello

chmod +x hello

3. 執行./hello

這時,報錯:-/bin/sh: ./hello: not found

三. 問題排除

用過絕對路徑也試過之後就確定並不是檔案是否存在的問題,而是這個檔案並不能被執行.

GOOGLE之後可以發現,排除上面提到問題後,就將問題定位到動態連結程式庫上.

於是在主機上用arm-linux-gcc -static -o 來進行靜態編譯.然後將新產生的檔案傳到目標板上.可以發現通過靜態編譯的檔案明顯比動態編譯的要大.

然後再次執行./hello  可以看到螢幕上出現了久違的Hello,World!

問題到這裡還沒有完,我們可以再思考下怎麼徹底解決,而不是每次都使用靜態編譯.

既然是動態庫引起的問題,那麼應該和編譯器的版本有關.在安裝編譯環境的時候同時安裝了3.4.1和4.3.3兩個版本.使用者手冊上說其中3.4.1是用來編譯u-boot的,4.3.3版本是用來編譯Linux核心和Qtipia的,兩個版本均可以用來編譯應用程式.

既然我們的核心使用4.3.3編譯的,而我們剛才編譯hello是使用3.4.1編譯的,那麼會不會是這個原因呢?

於是我們試一下,將$PATH中的原來包含3.4.1/bin 的路徑改為 4.4.3/bin . 修改的方法網上有很多.(直接export PATH=”想要的路徑”)

再次編譯,下載.

目標板上執行,成功顯示”Hello,World!”.

可以看到系統中動態庫的支援和編譯器還是有關的.

大家有什麼問題或者文章有什麼錯誤,可以提出來,大家一起討論:D

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.