目標板是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!”.
可以看到系統中動態庫的支持和編譯器還是有關的.
http://www.cnblogs.com/lzjsky/p/3730183.html