1. 在/usr/local下新建文件夾:arm
[guo@archlinux local]$sudo mkdir arm
2. 將交叉編譯工具拷貝到arm文件夾中
[guo@archlinux arm]$sudo mv ~/Downloads/arm-2011.03-41-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 .
[guo@archlinux arm]$ ls
arm-2011.03-41-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
3. 解壓
[guo@archlinux arm]$ sudo tar -xjvf arm-2011.03-41-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
[guo@archlinux arm]$ ls
arm-2011.03 arm-2011.03-41-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
4. 添加到PATH環境變量
[guo@archlinux arm]$ sudo gedit ~/.bashrc
在文件的最后寫入以下內容:
PATH=$PATH:/usr/local/arm/arm-2011.03/bin
5. 運行.bashrc文件,使設置生效。
進入用戶主目錄:
[guo@archlinux arm]$ cd
運行:
[guo@archlinux ~]$ . .bashrc
6. 驗證交叉編譯器是否安裝正確
輸入[guo@archlinux ~]$ arm-none-linux-gnueabi-后,按2下TAB鍵,如果能夠看到很多
arm-none-linux-gnueabi-前綴的命令,基本可以確定安裝成功。
arm-none-linux-gnueabi-addr2line arm-none-linux-gnueabi-gdbtui
arm-none-linux-gnueabi-ar arm-none-linux-gnueabi-gprof
arm-none-linux-gnueabi-as arm-none-linux-gnueabi-ld
arm-none-linux-gnueabi-c++ arm-none-linux-gnueabi-nm
arm-none-linux-gnueabi-c++filt arm-none-linux-gnueabi-objcopy
arm-none-linux-gnueabi-cpp arm-none-linux-gnueabi-objdump
arm-none-linux-gnueabi-elfedit arm-none-linux-gnueabi-ranlib
arm-none-linux-gnueabi-g++ arm-none-linux-gnueabi-readelf
arm-none-linux-gnueabi-gcc arm-none-linux-gnueabi-size
arm-none-linux-gnueabi-gcc-4.5.2 arm-none-linux-gnueabi-sprite
arm-none-linux-gnueabi-gcov arm-none-linux-gnueabi-strings
arm-none-linux-gnueabi-gdb arm-none-linux-gnueabi-strip
7. 讓64位的系統能夠運行和編譯32位程序。
[guo@archlinux ~]$ arm-none-linux-gnueabi-gcc -v
如果不成功,那就有可能需要安裝32位運行庫。
http://blog.csdn.net/qq_15345805/article/details/70864136
https://wiki.archlinux.org/index.php/Multilib
編輯 /etc/pacman.conf,取消下面內容的注釋:
[multilib]
Include = /etc/pacman.d/mirrorlist
[guo@archlinux ~]$ sudo nano /etc/pacman.conf
[sudo] password for guo:
[guo@archlinux ~]$
更新軟件包列表並升級系統
[guo@archlinux ~]$ sudo pacman -Syu
如果不管用,用命令安裝32位運行庫
[guo@archlinux ~]$ sudo pacman -S lib32-glibc
8. 測試工具鏈
編寫程序文件hello.c,輸入以下內容:
#include <stdio.h>
int main()
{
printf("hello world!\n");
return 0;
}
[guo@archlinux ~]$ cd /tmp
[guo@archlinux tmp]$ nano hello.c
[guo@archlinux tmp]$ cat hello.c
#include <stdio.h>
int main()
{
printf("hello world!\n");
return 0;
}
[guo@archlinux tmp]$
通過以下命令進行編譯,編譯后生成名為hello的可執行文件,通過file命令可以查看文件的類型。
當顯示以下信息時表明交叉工具鏈正常安裝了,通過編譯生成了ARM體系可執行的文件。
注意,通過該交叉編譯鏈編譯的可執行文件只能在ARM體系下執行,不能在基於X86的普通PC上執行。
[guo@archlinux tmp]$ arm-none-linux-gnueabi-gcc hello.c -o hello
[guo@archlinux tmp]$ ls
fcitx-socket-:0 hello.c sogou-qimpanel-cellguo
hello serverauth.xlA5PX22fa sogou-qimpanel:0.pid
[guo@archlinux tmp]$ file hello
hello: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.6.16, not stripped
更詳細內容參考以下博客:
交叉編譯工具鏈(GCC)建立 -- 寫的非常棒(兩篇寫的非常相似)
http://blog.chinaunix.net/uid-7762106-id-146774.html
http://blog.chinaunix.net/uid-8107907-id-2034159.html
交叉編譯工具鏈 -- 主要是介紹
http://blog.csdn.net/qfnu08zzr/article/details/48264331
交叉編譯詳解
https://www.crifan.com/files/doc/docbook/cross_compile/release/html/cross_compile.html