Ubuntu 環境arm-linux交叉工具鏈安裝 和 編譯arm平臺動態庫

一、前言

        這兩天接到的兩個關於Linux 平臺相關的項目,一個Linux 桌面平臺的工具開發,另一個是與客戶使用的ARM 平臺相關的工具編寫。客戶環境爲三星 ARM 平臺Linux 環境,因而需要我們公司提供arm 平臺動態庫給他們。於是,這個項目落在我的身上,好久沒有編寫過ARM平臺相關的東西。因此,寫下這篇文章,記錄我使用Ubuntu 安裝交叉編譯工具<arm-cortexa9-linux-gnueabihf-4.9.3-20160512.tar.xz>,編寫使用交叉編譯工具編寫動態庫過程。

二、開發環境:

Linux: Ubuntu 16.04  64位桌面版

交叉編譯工具:arm-cortexa9-linux-gnueabihf-4.9.3-20160512.tar.xz

 

三、安裝交叉編譯工具

3.1 將arm-cortexa9-linux-gnueabihf-4.9.3-20160512.tar.xz  從共享文件夾中,複製的home/tool 目錄下,如圖:

進入tool目錄,解壓解壓:arm-cortexa9-linux-gnueabihf-4.9.3-20160512.tar.xz,得到 4.9.3 目錄

執行如下命令:tar xvJf arm-cortexa9-linux-gnueabihf-4.9.3-20160512.tar.xz

3.2 依據傳統,^_^ 在 /usr/local/  新建一個 名稱爲 arm 目錄,然後將 4.9.3 目錄及目錄下所有文件拷貝到arm 目錄下,如:

cp -rf /4.9.3 /usr/local/arm/ , 進入arm 目錄,可以看到4.9.3 目錄。

3.3 配置Linux 系統環境變量,在 ~/.bashrc 最後一行添加,環境變量代碼,如下,

vim ~/.bashrc

3.3.1 使用vim 打開bashrc , 進入文件最後一行,添加如下代碼:

PATH=$PATH:/usr/local/arm/4.9.3/bin/
export PATH

3.3.2 重啓登錄即可使用交叉編譯工具,於是交叉編譯工具安裝配置完畢。

四、測試安裝的交叉編譯工具是否安裝成功

4.1 檢測交叉編譯工具是否安裝成功並且環境變量是否配置正確,可以使用如下方法測試:

4.1.1 查看gcc 編譯版本,即可,使用如下命令:

arm-cortexa9-linux-gnueabihf-gcc -v

顯示如下信息,則爲安裝成功。

五、編寫程序helloworld.c 程序驗證arm-linux-gcc 是否可以使用

5.1.1 使用gcc  helloworld.c -o helloworld 命令編譯通過,代碼沒有問題,

5.2.1 將gcc 換成,arm-cortexa9-linux-gnuebinf-gcc

arm-cortexa9-linux-gnuebinf-gcc helloworld.c -o helloworld ,發現出現如下致命錯誤

arm-cortexa9-linux-gnueabihf-gcc: fatal error: -fuse-linker-plugin, but liblto_plugin.so not found
compilation terminated.

在度娘找了半天,任然沒有發現問題的解決辦法,好像沒有人遇到過。o(╥﹏╥)o

o(╥﹏╥)o  ,是不是系統太老呢,(因爲上一個項目是在Ubuntu 12.04 下開發的,因此,這個項目也是一樣使用12.04),於是換個Ubuntu 17.04 系統看試一下,結果發現還是一樣,出現這個問題。

研究,別人安裝交叉編譯工具的流程,發現都是這樣子的,沒有什麼不同,安裝完後,查看arm-cortexa9-linux-gnuebinf-gcc -v

都是可以看的到版本信息。這就奇怪了,╮(╯▽╰)     ╭╮(╯▽╰)╭

後來,偶然間發現上面的交叉編譯工具是2016年出來的,會不會與Ubuntu 環境,有關係。抱着試試的態度,我又安裝了一個Ubuntu 16.04 系統,然後按着步驟安裝交叉編譯工具,然後執行arm-cortexa9-linux-gnuebinf-gcc helloworld.c -o helloworld

沒有報錯,正常通過。o(╥﹏╥)o    o(╥﹏╥)o  好像與Linux 版本有關係,爲什麼網上就沒有人遇到過呢??????

開源項目雖好,但是兼容性太差了,差了一個版本就不能用,這也太坑了。╮(╯▽╰)╭

六、使用arm-cortexa9-linux-gnuebinf-gcc 編譯動態庫

6.1 編寫MakeFile 和源代碼。

執行使用gcc make 導出.so , 正常運行,如下圖:

6.2 將MakeFILE 中gcc 該成arm-cortexa9-linux-gnueabihf-gcc

make 導出.so 出現如下錯誤,

strip: Unable to recognise the format of the input file `libicmmodule.so'
Makefile:24: recipe for target 'libicmmodule.so' failed
make: *** [libicmmodule.so] Error 1

發現,原來是Makefile 中使用strip 去除和剝掉一些符號信息和調試信息時報錯,進入MakeFile 發現,沒有將gcc 下的strip,修改成arm-cortexa9-linux-gnueabihf-gcc 對應的 arm-linux-strip 。

修改Makefile文件,

重新make ,成功,O(∩_∩)O哈哈~。

好了,終於寫完了這篇文章了,對於小白的我,寫下這篇文章還是非常有必要的,防止下次項目又會遇到,好記憶不如爛筆頭。

半夜12點了,睡覺了。(¦3[▓▓] 晚安。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章