linux的系统移植——交叉编译器
1.為什么要有交叉編譯器?
\qquad一般電腦是X86架構(gòu),而單片機(jī)一般不是,比如單片機(jī)是ARM架構(gòu),那么gcc編譯生成的程序只能在X86的架構(gòu)上運(yùn)行,而不能在ARM架構(gòu)上運(yùn)行,所以需要交叉編譯器編譯生成能在ARM架構(gòu)上運(yùn)行的程序。
\qquad查看一個可執(zhí)行程序,究竟屬于哪個架構(gòu),可以使用file命令。比如有.c文件hello.c。
\qquad運(yùn)行結(jié)果:
hello: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=bf1698069c3282a51cf380a29c30a8a9062e270e, for GNU/Linux 3.2.0, not stripped2.安裝交叉工具鏈
\qquad安裝過程很簡單,就是解壓縮的過程。
\qquad第一步:解壓到linux標(biāo)準(zhǔn)目錄,一般解壓到/usr/local/arm/下面。
\qquad第二步:添加環(huán)境變量:編輯/etc/environment ,然后添加把交叉工具鏈的bin目錄的絕對路徑,注意一定要在原PATH中添加,不要另外起一行,然后source;如果要是使用時,采用絕對路徑,可以不用第二步添加環(huán)境變量。
3.使用
\qquad 3.1使用的簡單方式,需要添加環(huán)境變量。當(dāng)時當(dāng)有多個編譯器時,可能會出現(xiàn)問題
arm-linux-gnueabi-gcc hello.c -o hello\qquad 3.2 使用絕對路徑方法,使用比較復(fù)雜,但是準(zhǔn)確
/usr/local/arm/gcc-linaro-5.3.1-2016.05-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-gcc hello.c -o hello4.添加32位lib
\qquad交叉編譯器是在32位系統(tǒng)上制作的,所以需要用到32位的lib;如果我們的linux系統(tǒng)是64位的,可以有時候會出現(xiàn)無法找到交叉編譯器命令的問題,這個問題有可能是使用簡單交叉編譯器命令而沒有添加環(huán)境變量,也有可能是沒有添加32位的lib。下面介紹如何添加32位lib。
\qquadUbuntu12.04以前的版本:sudo apt-get install ia32-libs
\qquadubuntu12.04以后的版本:sudo apt-get install libc6:i386 sudo apt-get install lib32z1
5.查看交叉編譯器版本和使用
\qquad查看版本:arm-linux-gnueabi-gcc -v
\qquad目錄下有一個hello.c文件,我們使用交叉編譯器編譯,然后使用file命令查看,程序運(yùn)行的架構(gòu)。
\qquad運(yùn)行結(jié)果:hello: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux2.6.32,BuildID[sha1]=20ab9e34b81a80b48ed4a048a4db4bb2d09378e2, with debug_info, not stripped
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的linux的系统移植——交叉编译器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hadoop相关技术
- 下一篇: linux文件IO——目录操作和文件属性