1. 程式人生 > >arm-Linux交叉編譯

arm-Linux交叉編譯

平常我們做的編譯叫本地編譯,也就是在當前平臺編譯編譯得到的程式也是愛本地執行。相對而言的交叉編譯指的是在一個平臺上生成另一個平臺的可執行程式碼。

常見的交叉編譯有以下三種

在windows pc 上,利用ads,使用arm cpu的可執行程式碼。在linux pc 上,利用arm-linux-gcc編譯器,編譯出正對linux arm品臺的可執行程式碼。

在windows pc上,利用cygwin環境,執行armelf-gcc編譯器,編譯出正對arm cpu 的可執行程式碼。

一、下載原始檔

原始碼檔案及其版本與下載地址:

Binutils-2.19.tar.bz2

gcc-4.4.4.tar.bz2

Glibc-2.11.2.tar.bz2

Glibc-ports-2.11.tar.bz2

Gmp-4.2.tar.bz2

Mpfr-2.4.0.tar.bz2

Linux-2.6.29.tar.bz2

Patch-2.6.29.bz2 

一般一個完整的交叉編譯器涉及到多個軟體,主要包括binutils、gcc、glibc等。其中,binutils主要生成一些輔助工具;gcc是用來生成交叉編譯器,主要生成arm-linux-gcc交叉編譯工具,而glibc主要提供使用者程式所需要的一些基本函式庫。

二、建立工作目錄

     編譯所用主機型號 FC12.i686

     第一次編譯時用的是root使用者(第二次用一般使用者karen,該使用者可以使用sudo指令)

     所有的工作目錄都在/home/Karen/cross下面建立完成,首先在/home/karen目錄下建立cross目錄

 [[email protected]  karen] mkdir cross

進入工作目錄:

[[email protected]  root]#cd /home/karen/cross           
 檢視當前目錄:

[[email protected]  cross ]# pwd 
/home/karen/cross 

建立工具鏈資料夾:

[[email protected]  cross]# mkdir embedded-toolchains

在建立了頂層資料夾embedded- toolchains,下面在此資料夾下建立如下幾個目錄:

Ø  setup-dir,存放下載的壓縮包;

Ø  src-dir,存放binutils、gcc、glibc解壓之後的原始檔;

Ø  kernel,存放核心檔案,對核心的配置和編譯工作也在此完成;

Ø  build-dir ,編譯src-dir下面的原始檔,這是GNU推薦的原始檔目錄與編譯目錄分離的做法;

Ø  tool-chain,交叉編譯工具鏈的安裝位;

Ø  program,存放編寫程式;

Ø  doc,說明文件和指令碼檔案;

    下面建立目錄,並拷貝原始檔。

[[email protected]  cross] #cd embedded- toolchains
[[email protected]  embedded- toolchains] #mkdir setup-dir src-dir kernel build-dir tool-chain program doc
[[email protected]  embedded- toolchains] #ls
build-dir doc kernel program setup-dir src-dir tool-chain
[[email protected]  embedded- toolchains] #cd setup-dir

 拷貝原始檔:
這裡我們採用直接拷貝原始檔的方法,首先應該修改setup-dir的許可權

[[email protected]  embedded- toolchains] #chmod 777 setup-dir

然後直接拷貝/home/karen目錄下的原始檔到setup-dir目錄中,如下圖:

 

 建立編譯目錄:

[[email protected]  setup-dir] #cd ../build-dir
[[email protected]  build -dir] #mkdir build-binutils build-gcc build-glibc

三、輸出環境變數

輸出如下的環境變數方便我們編譯。

為簡化操作過程。下面就建立shell命令指令碼environment-variables:
[[email protected]  build -dir] #cd ../doc
[[email protected]  doc] #mkdir scripts
[[email protected]  doc] #cd scripts
用編輯器vi編輯環境變數指令碼envionment-variables:

[[email protected]  scripts] #vi envionment-variables  
export  PRJROOT=/home/mxl/diliuzhang/embedded- toolchains
export  TARGET=arm-linux
export  PREFIX=$PRJROOT/tool-chain
export  TARGET_PREFIX=$PREFIX/$TARGET
export  PATH=$PREFIX/bin:$PATH

截圖如下:

%% Q:為什麼用了source ./environment-variables才正常執行,去掉source就沒有執行? %%

%%  如果用source 執行, 不需要指令碼有執行許可權, 許可權為664也可以,執行命令如下:%%

%%  Source environment-variables %%

說明:

TARGET變數用來定義目標板的型別,以後會根據此目標板的型別來建立工具鏈。參

看錶6-1所示。目標板的定義與主機的型別是沒有關係的,但是如果更改TARGET的值,

GNU工具鏈必須重新建立一次。
PREFIX變數提供了指標,指向目標板工具程式將被安裝的目錄。
TARGET_PREFIX變數指向與目標板相關的標頭檔案和連結庫將被安裝的目錄。
PATH變數指向二進位制檔案(可執行檔案)將被安裝的目錄。

如果不慣用環境變數的,可以直接用絕對或相對路徑。如果不用環境變數,一般都用絕對路徑,相對路徑有時會失敗。環境變數也可以定義在.bashrc檔案中,這樣就不用老是export這些變量了。

體系結構和TAEGET變數的對應如下表6-1所示:

表6-1 體系結構和TAEGET變數的對應

體系結構

TARGET變數的值

PowerPC

Powerpc-linux

ARM

arm-linux

MIPS(big endian)

mips-linux

MIPS(little endian)

mipsel-linux

MIPS64

mips64-linux

SuperH3

sh3-linux

SuperH4

sh4-linux

I386

i386-linux

Ia64

ia64-linux

M68k

m68k-linux

M88k

m88k-linux

Alpha

alpha-linux

Sparc

sparc-linux

Sparc64

sparc64-linux

四、建立二進位制工具(binutils)

Binutils是GNU工具之一,它包括聯結器、彙編器和其他用於目標檔案和檔案的工具,它是二進位制程式碼的處理維護工具。安裝Binutils工具包含的程式有addr2line、ar、as、c++filt、gprof、ld、nm、objcopy、objdump、ranlib、readelf、size、strings、strip、libiberty、libbfd和libopcodes。對這些程式的簡單解釋如下。

Ø  addr2line  把程式地址轉換為檔名和行號。在命令列中給它一個地址和一個可執行檔名,它就會使用這個可執行檔案的除錯資訊指出在給出的地址上是哪個檔案以及行號。

Ø  ar  建立、修改、提取歸檔檔案。歸檔檔案是包含多個檔案內容的一個大檔案,其結構保證了可以恢復原始檔案內容。

Ø  as  主要用來編譯GNU C編譯器gcc輸出的彙編檔案,產生的目標檔案由聯結器ld連線。

Ø  c++filt  聯結器使用它來過濾 C++ 和 Java 符號,防止過載函式衝突。

Ø  gprof  顯示程式呼叫段的各種資料。

Ø  ld  是聯結器,它把一些目標和歸檔檔案結合在一起,重定位資料,並連線符號引用。通常,建立一個新編譯程式的最後一步就是呼叫ld。

Ø  nm  列出目標檔案中的符號。

Ø  objcopy  把一種目標檔案中的內容複製到另一種型別的目標檔案中。

Ø  objdump  顯示一個或者更多目標檔案的資訊。使用選項來控制其顯示的資訊,它所顯示的資訊通常只有編寫編譯工具的人才感興趣。

Ø  ranlib  產生歸檔檔案索引,並將其儲存到這個歸檔檔案中。在索引中列出了歸檔檔案各成員所定義的可重分配目標檔案。

Ø  readelf  顯示elf格式可執行檔案的資訊。

Ø  size  列出目標檔案每一段的大小以及總體的大小。預設情況下,對於每個目標檔案或者一個歸檔檔案中的每個模組只產生一行輸出。

Ø  strings  列印某個檔案的可列印字串,這些字串最少4個字元長,也可以使用選項-n設定字串的最小長度。預設情況下,它只打印目標檔案初始化和可載入段中的可列印字元;對於其它型別的檔案它列印整個檔案的可列印字元。這個程式對於瞭解非文字檔案的內容很有幫助。

Ø  strip  丟棄目標檔案中的全部或者特定符號。

Ø  libiberty  包含許多GNU程式都會用到的函式,這些程式有getopt、obstack、strerror、strtol和strtoul。

Ø  libbfd  二進位制檔案描述庫。

Ø  libopcode  用來處理opcodes的庫,在生成一些應用程式的時候也會用到它。

Binutils工具安裝依賴於Bash、Coreutils、Diffutils、GCC、Gettext、Glibc、Grep、Make、Perl、Sed、Texinfo等工具

下面將分步介紹安裝binutils-2.19.2的過程。

[[email protected]  script] # cd $PRJROOT/src-dir
[[email protected]  src-dir] # tar jxvf ../setup-dir/binutils-2.19.tar.bz2
[[email protected]  src-dir] # cd $PRJROOT/build-dir/build-binutils
建立Makefile:

[[email protected]  build-binutils] #http://www.cnblogs.com/src-dir/binutils-2.19/configure --target=$TARGET --prefix=$PREFIX

   在build-binutils目錄下面生成Makefile檔案,然後執行make,make install。完成後可以在$PREFIX/bin下面看到我們的新的binutil。

注意:每個工具的檔名的字首都是前面為TARGET變數設定的值。如果目標板arm-linux,那麼這些工具的檔名字首就會是arm-linux-。這樣就可以根據目標板型別找到正確的工具程式。

  

五、建立核心標頭檔案

在這裡我們使用時2.6.29的核心版本,因為交叉工具鏈工具鏈是針對特定的處理器和作業系統的,因此在編譯之前就需要對linux核心進行配製,可以通過“make config”或“make menuconfig”命令對核心進行配製,配製完成後,在linux原始檔的目錄下就會生成一個.config檔案,這就是我們所需要的檔案。

Note: 目標板的核心版本是2.6.29

[[email protected]  embedded- toolchains] #cd kernel

[[email protected]  kernel] #tar jxvf ../setup-dir/ linux-2.6.29.tar.bz2                
[[email protected]  kernel] #bunzip2 ../setup-dir/ patch-2.6.29.bz2 
[[email protected]  kernel] #cd linux-2.6.29
給Linux核心打補丁:

[[email protected]  linux-2.6.29] #patch –p1  <  http://www.cnblogs.com/setup-dir/patch-2.6.29

然後就是配置核心,第一步是修改Makefile

修改 Makefile:

ARCH = arm                         

CROSS_COMPILE = arm-linux- menuconfig  

接著使用make menuconfig進入核心配置選單

或者直接寫:

# make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig ,注意在配置時一定要選擇處理器的型別,比如我的目標機使用的處理器是OMAP型別的,就選TI OMAP:

System Type -à

         ARM System Type -à

         (x) TI OMAP

配置完退出並儲存。

配置完須執行make,引數如下:

[[email protected] linux-2.6.29]# make ARCH=arm CROSS_COMPILE=arm-linux- (執行過程中有錯誤出現也沒關係,主要目的是產生標頭檔案version.h和autoconf.h)

執行完檢查一下核心目錄中的/kernel/linux-2.6.29/include/linux/version.h和autoconf.h檔案是不是生成了,這是編譯glibc要用到的。version.h 和 autoconf.h 檔案的存在,說明你生成了正確的標頭檔案。

接下來建立工具鏈需要的include目錄,並將核心標頭檔案複製過去。
[[email protected]  linux-2.6.29] #cd include
[[email protected]  include] #ln -s asm-arm asm

可以檢視一下,經過編譯可以自動生成。如果已經生成連結,則不必重新連結。(2.6.29已自動生成)
[[email protected]  include] #cd asm
[[email protected]  asm] #ln -s arch-epxa arch  

[[email protected]  asm] #ln -s proc-armv proc

可以檢視一下,經過編譯可以自動生成。如果已經生成連結,則不必重新連結。

複製標頭檔案到交叉編譯工具鏈的安裝目錄:

[[email protected]  asm] #mkdir –p $TARGET_PREFIX/include
[[email protected] asm] #cp –r $PRJROOT/kernel/linux-2.6.29/include/linux $TARGET_PREFIX/include
[[email protected]  asm] #cp –r $PRJROOT/ kernel /linux-2.6.29/include/asm-arm $TARGET_PREFIX/include/asm

[[email protected]  asm] #cp –r $PRJROOT/ kernel /linux-2.6.29/include/asm-generic $TARGET_PREFIX/include

[email protected]  asm] #cp –r $PRJROOT/ kernel /linux-2.6.29/arch/arm/include/asm  $TARGET_PREFIX/include

[email protected]  asm] #cp –r $PRJROOT/ kernel /linux-2.6.29/arch/arm/mach-omap2/include/mach $TARGET_PREFIX/include/asm

Note: mach-xxx是根據目標板所用的cpu型別來選擇的

六、建立初始編譯器 (boot strap gcc)

這一步的目的主要是建立arm-linux-gcc工具,注意這個gcc沒有glibc庫的支援,所以只能用於編譯核心、BootLoader等不需要C庫支援的程式,後面建立C庫也要用到這個編譯器,所以建立它主要是為建立C庫做準備,如果只想編譯核心和BootLoader,那麼安裝完這個就可以到此結束。安裝過程如下:

  [[email protected]  build-binutils] #cd $PRJROOT/setup-dir

重新命名:
[[email protected]  setup-dir] #mv gcc-core-4.4.4.tar.bz2  gcc-4.4.4.tar.bz2 
[[email protected]  setup-dir] #cd $PRJROOT/src-dir
[[email protected]  src-dir] #tar jxvf ../setup-dir/gcc-4.4.4.tar.bz2

從 GCC-4.3起,安裝GCC將依賴於GMP-4.1以上版本和MPFR-2.3.2以上版本。如果將這兩個軟體包分別解壓到GCC原始碼樹的根目錄下,並分別命名為"gmp"和"mpfr",那麼GCC的編譯程式將自動將兩者與GCC一起編譯。建議儘可能使用最新的GMP和MPFR版本。

[[email protected] src-dir]# tar jxvf ../setup-dir/mpfr-2.4.0.tar.bz2

[[email protected] src-dir]# tar jxvf ../setup-dir/gmp-4.2.tar.bz2

[[email protected] src-dir]# mv mpfr-2.4.0 gcc-4.4.4/mpfr

[[email protected] src-dir]# mv gmp-4.2.0 gcc-4.4.4/gmp

•因為是交叉編譯器,還不需要目標板的系統標頭檔案,所以需要使用 --without-headers這個選項。否則會有很多*.h標頭檔案找不到的報錯

•--enable-language=c用來告訴配置指令碼,需要產生的編譯器支援何種語言,現在只需支援C語言。雖然配置為c,c++也可以的

•--disable-threads 是因為threads需要libc的支援。

•--disable-decimal-float,需要libc的支援,而我們在初步編譯的時候尚未生成libc,否則出現以下的報錯:

http://www.cnblogs.com/../gcc-4.3.1/libgcc/config/libbid/bid_decimal_globals.c:52:18: error: fenv.h: No such file or directory

http://www.cnblogs.com/../gcc-4.3.1/libgcc/config/libbid/bid_decimal_globals.c: In function '__dfp_test_except':

http://www.cnblogs.com/../gcc-4.3.1/libgcc/config/libbid/bid_decimal_globals.c:64: error: 'FE_INEXACT' undeclared (first use in this function)

http://www.cnblogs.com/../gcc-4.3.1/libgcc/config/libbid/bid_decimal_globals.c:64: error: (Each undeclared identifier is reported only once

http://www.cnblogs.com/../gcc-4.3.1/libgcc/config/libbid/bid_decimal_globals.c:64: error: for each function it appears in.)

•--disable-shared,既然是第一次安裝ARM交叉編譯工具,那麼本機的glibc支援的應該是本機的編譯工具庫,而不是ARM交叉編譯工具庫。forces GCC to link its internal libraries statically,沒有這個選項,會有 crti.o: No such file: No such file or directory collect2: ld returned 1 exit status

:由於沒有arm的glibc,需要使用--disable-libmudflap --disable-libssp,禁止兩個邊界檢查使用的庫。

同樣,由於第一次安裝ARM交叉編譯工具,那麼支援的libc庫的標頭檔案也沒有,src-dir/gcc-4.4.4/gcc/config/arm/t-linux檔案,在TARGET_LIBGCC2_CFLAGS中新增兩個定義:-Dinhibit_libc  –D__gthr_posix_h

原文:

TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer –fPIC

改後:

TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer -fPIC -Dinhibit_libc -D_gthr_posix.h

編譯:
[[email protected]  src-dir] #cd $PRJROOT/build-dir/build-gcc

[[email protected] build-gcc]# http://www.cnblogs.com/src-dir/gcc-4.4.4/configure --target=$TARGET --prefix=$PREFIX --without-headers --enable-languages=c --disable-shared --disable-threads --disable-decimal-float –disable-libmudflap –disable-lipssp

 [[email protected] build-gcc]# make all-gcc

 [[email protected] build-gcc]# make install-gcc

 [[email protected] build-gcc]# make all-target-libgcc

 [[email protected] build-gcc]# make install-target-libgcc

很多資料中之有前面兩項,這隻建立了gcc,沒有建立libgcc.a,這樣會在glibc的編譯中出現-lgcc沒有找到的錯誤。報告:

……/build-tools/build-glibc/libc_pic.a

i586-linux-gcc   -nostdlib -nostartfiles -r -o /home/wei/workspace/mywork/moblin/build-tools/build-glibc/elf/librtld.map.o '-Wl,-(' /home/wei/workspace/mywork/moblin/build-tools/build-glibc/elf/dl-allobjs.os /home/wei/workspace/mywork/moblin/build-tools/build-glibc/libc_pic.a -lgcc '-Wl,-)' -Wl,-Map,/home/wei/workspace/mywork/moblin/build-tools/build-glibc/elf/librtld.mapT

/workspace/wei/mywork/moblin/tools/bin/../lib/gcc/arm-linux/4.4.4/http://www.cnblogs.com/http://www.cnblogs.com/ram-linux/bin/ld: cannot find -lgcc

在glibc的編譯中,還需要libgcc_eh.a(否則出現錯誤:-lgcc_eh沒有找到……bin/ld: cannot find -lgcc_eh),使用了--disable-shared的選項,將不會生成libgcc_eh.a,可以通過對libgcc.a的連結來實現。

[[email protected] build-gcc]#  ln -vs libgcc.a `arm-linux-gcc -print-libgcc-file-name | sed 's/libgcc/&_eh/'`

  Note:arm-linux-gcc與-print-libgcc-file-name之間有一個空格  

 執行報告:

“/workspace/wei/mywork/moblin/tools/bin/../lib/gcc/i586-linux/4.3.3/libgcc_eh.a” -> “libgcc.a”

裝完成後,檢視結果:

[[email protected]  build-gcc] #ls $PREFIX/bin 

 

如果arm-linux-gcc等工具已經生成,表示boot trap gcc工具已經安裝成功

七、編譯glibc

  這一步是最為繁瑣的過程,目標板必須靠它來執行或者是開發大部分的應用程式。glibc套件常被稱為C連結庫,但是glibc實際產生很多連結庫,其中之一是C連結庫libc。因為嵌入式系統的限制,標準GNU C連結庫顯得太大,不適合應用在目標板上。所以需要尋找C連結庫的替代品,在這裡現以標準GNU C為例建立工具鏈。

[[email protected]  build-gcc] #cd $PRJROOT/src-dir
[[email protected]  src-dir] # tar jxvf ../setup-dir/glibc-2.11.2.tar.bz2
[[email protected]  src-dir] # tar jxvf ../setup-dir/glibc-ports-2.11.tar.bz2

[[email protected]  src-dir] # mv –v glibc-ports-2.11 glibc-2.11.2/ports

[[email protected]  src-dir] # cd glibc-2.11.2

[[email protected]  glibc-2.11.2] # patch –Np1 –i http://www.cnblogs.com/setup-dir/glibc-2.11.2-gcc_fix-1.patch

[[email protected]  glibc-2.11.2] # patch –Np1 –i http://www.cnblogs.com/setup-dir/glibc-2.11.2-makefile_fix-1.patch

[[email protected]  glibc-2.11.2] # cd $PRJROOT/build-dir/build-glibc

[[email protected] build-glibc] # CC=arm-linux-gcc AR=arm-linux-ar RANLIB=arm-linux-ranlib /
http://www.cnblogs.com/src-dir/glibc-2.11.2/configure /
--host=arm-linux /
--prefix=$PREFIX/$TARGET /

--with-tls --disable-profile /
--enable-add-ons /

--with-headers=$PREFIX/$TARGET/include /
libc_cv_forced_unwind=yes /
libc_cv_c_cleanup=yes /

libc_cv_arm_tls=yes

 [[email protected] build-glibc] # make

 [[email protected] build-glibc] # make install

   注:以上完成後,請檢視一下$TARGET_PREFIX/lib目錄下的檔案libc.so,看看GROUP的內容是否指定到可以用於交叉編譯的庫,如果不是請修改,如下。

   libc.so 檔案(所在目錄是$TARGET_PREFIX/lib),將GROUP ( /lib/libc.so.6 /lib/libc_nonshared.a)改為GROUP ( libc.so.6 libc_nonshared.a)

這樣連線程式 ld 就會在 libc.so 所在的目錄查詢它需要的庫,因為你的機子的/lib目錄可能已經裝了一個相同名字的庫,一個為編譯可以在你的宿主機上執行的程式的庫,而不是用於交叉編譯的。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 經過檢視,發現libc.so中的GROUP已經是交叉編譯鏈的目錄,所以不用更改

對 libc.so 的修正·

vi $PREFIX /${TARGET}/lib/libc.so

去掉絕對路徑,修改後的內容如下:

/* GNU ld script

    Use the shared library, but some functions are only in

    the static library, so try that secondarily. */

OUTPUT_FORMAT(elf32-littlearm)

GROUP ( libc.so.6 libc_nonshared.a AS_NEEDED ( ld-linux.so.3 ) )

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

八、建立全套編譯器 (full gcc)

[[email protected]  build-gcc] #http://www.cnblogs.com/src-dir/gcc-4.4.4/configure --target=$TARGET --prefix=$PREFIX  --enable-languages=c,c++ --enable-shared

[[email protected]  build-gcc] #make all

[[email protected]  build-gcc] #make install

  

我們再來看看 $PREFIX/bin 裡面多了哪些東西。你會發現多了 arm-linux-g++ 、和 arm-linux-c++ 幾個檔案。

G++-gnu的 c++ 編譯器。

C++-gnu 的 c++ 編譯器。

至此,整個交叉編譯環境就建立完成了。

 九、完成工具鏈的設定

 [email protected]  build-gcc] # cd $TARGET_PREFIX/bin

檢視檔案是否為二進位制檔案:
[[email protected]  bin] # file as ar gcc ld nm ranlib strip   

檢視預設的搜尋路徑:
[[email protected]  bin] #arm-linux-gcc -print-search-dirs  

  十、測試和驗證交叉編譯工具

    下面編寫一個簡單的C程式,使用建立的工具鏈。、
[[email protected]  bin] #cd $PRJROOT/program
[[email protected]  program] #vi hello.c
#include <stdio.h>

int main(void)

相關推薦

GDB arm-linux交叉編譯移植和使用方法(特別是對於正在執行的程式或者段錯誤的程式進行分析)

測試程式碼中的test1是用來定位堆疊段錯誤,Delay函式是用來定位程式阻塞,都可以用gdb定位出來,如下:  (1)測試程式執行時首先會有個段錯誤:./gdbtest & [[email protected] user0]$ [65334.020000] pgd = c3e14000 [

arm-Linux交叉編譯

平常我們做的編譯叫本地編譯,也就是在當前平臺編譯編譯得到的程式也是愛本地執行。相對而言的交叉編譯指的是在一個平臺上生成另一個平臺的可執行程式碼。 常見的交叉編譯有以下三種 在windows pc 上,利用ads,使用arm cpu的可執行程式碼。在linux pc 上,利用

arm-linux交叉編譯環境搭建及交叉工具鏈 (JZ2440v2)

1. 交叉編譯環境搭建: (1)[email protected]:/home/caihuanming#          #不是root使用者 tar xvf arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2 -C ./      

arm+linux交叉編譯libxml2

1 configure.sh     編寫配置指令碼configure.sh如下: #!/bin/bash PREFIX=/home/share/libxml2 HOST=arm-hisi-linux ./configure --prefix=$PREFIX --host=$HOST    執行config

一步步製作 Arm-Linux交叉編譯環境

        我們使用以下版本的檔案為例子建立 arm-linux 交叉編譯環境: 編譯環境 redhat 7.2 或 8.0 binutils-2.14.tar.gz ftp://ftp.gnu.org/gnu/binutils/binutils-2.14.tar.g

Linux下獲取arm交叉編譯工具鏈

win 5.1 app應用 地址 打開 release nbsp 最新 component 轉載請註明文章:Linux下獲取arm的交叉編譯工具鏈 出處:多客博圖 這裏介紹,Linux下獲取arm的交叉編譯工具鏈,比如arm-linux-gnueabihf-gcc、a

記一次grpc arm-hisiv400-linux交叉編譯

時間緊,先大概說明一下,有時間了再補充詳細的說明 grpc 交叉編譯 需要先編譯出pc版的protobuff 和 grpc,安裝到指定的路徑,在做交叉編譯時需要protoc 和grpc_cpp_plugin工具。這兩個工具也也是在編譯時會生成,交叉編譯過程中要遮蔽掉使用交叉

UBUNTU 12.04下傻瓜式簡單安裝arm-linux-gcc等gnu arm toolchain交叉編譯工具

歡迎轉載,轉載時請保留作者資訊,謝謝。 1. 驗證無誤的工具鏈安裝(能正常編譯linux,busybox等): 可以去這個地址下載工具鏈,是作者上傳的,要2分,當是辛苦分了,要免費的可以去min2440官網下載,地址我在下面也貼出來了。 CSDN下載連結:htt

OpenCV ARM移植(交叉編譯opencv) arm-oe-linux-gnueabi-gcc編譯opencv3.1.0

 Cmake的安裝 OpenCV 2.2以後版本需要使用Cmake生成makefile檔案,因此需要先安裝cmake。 ubuntu下安裝cmake比較簡單, apt-get install cmake 如果覺得自帶的版本不符合要求,可以下載安裝包。 下載最新版的安裝

arm linux編譯庫System.Net.Primitives.dll和System.Xml.XmlSerializer.dll

cad serial linu 5.4 mcs download 切換 mon dll 1.環境: /home/jello # uname -aLinux 3.10.0 #2 SMP Mon Mar 6 17:52:09 CST 2017 armv7l GNU/Linux

linux交叉編譯gcc4.8.3

切換目錄 all make multi req 交叉 gcc arm-linux 生成 1.環境: Ubuntu 16.04 2.獲取 wget mirrors.ustc.edu.cn/gnu/gcc/gcc-4.8.3/gcc-4.8.3.tar.bz2 3.解壓 tar

esp8266~入坑sdk 3.0 IDF框架和linux交叉編譯環境搭建

一、交叉編譯環境搭建步驟 1、安裝virtualbox、ubuntu虛擬機器共享windows資料夾,注!virtualbox最好裝在C盤,不然安裝虛擬工具經常會失敗。 2、新建共享目錄,掛載共享目錄到虛擬機器中 sudo mount -t vboxsf share /mn

arm-linux-gcc編譯環境搭建

記錄下來,方便以後查詢 1.解壓 sudo tar -xvlf arm-linux-gcc-4.4.3.tar.gz 2.建立目錄 sudo mkdir /usr/local/arm_4.43 3.把解壓的東西移動到剛剛新建的目錄 sudo mv /opt/F

arm-linux-gcc編譯時出現的一些小插曲-----64位系統需要32位的庫

最近由於工作的需要,重新弄起arm-linux-gcc編譯。離上一次弄這些有整整10年了。 我是在一臺64位的機器上實機安裝的 centos7 發行版,系統和交叉編譯器的安裝過程自是沒話說,問題出在使用arm-linux-gcc編譯 arm程式時, $ arm-linu

linux交叉編譯和核心編譯

20181005記 一、交叉編譯arm-linux-gcc 由於嵌入式系統資源匱乏,一般不能像 PC 一樣安裝本地編譯器和偵錯程式,不能在本地編寫、編譯和除錯自身執行的程式,而需藉助其它系統如 PC 來完成這些工作,這樣的系統通常被稱為宿主機。 宿主機通常是 L

bitcoin 0.10.0 版本 linux 交叉編譯 windows 版本 (gitian 編譯) 踩坑指南

因為 bitcoin 最新版本沒有挖礦程式碼,所以本人基於 bitcoin 0.10.0 版本修改創世塊重新打包了一個新的幣 修改創世快教程 https://blog.csdn.net/wab719591157/article/details/80747043 linux 版本編譯

(轉)如何將arm-linux-gcc編譯的動態連結helloworld在Android上執行

如何將arm-linux-gcc編譯的動態連結helloworld在Android上執行 https://blog.csdn.net/kangear/article/details/78537352 標題起得有點長,但是少一個字都不足以描述清楚我要說的。Android上要用C程式無非兩種方法

arm-linux核心編譯過程小結

記在前面的雜七雜八核心的生成,實際上最終的目的是生成一個binary檔案zImage,大小2-5MB的數量級。使用者可以從kernel.org得到的tar.gz格式的核心原始碼,此程式碼解壓後,就會生成初始狀態的核心原始碼樹,這種狀態稱為核心的初始狀態。通過make mrproper/make distcle

ARM交叉編譯dbus中 error: expat.h 檔案沒有找到的解決方案

糾結了很久,下載了最新的expat原始檔,並且交叉編譯成功了,並且將庫檔案放到了交叉編譯器下,但是就是出現這種問題,最後沒辦法,通過在configure之後加入: --with-xml=libxml 其實就是相當於將xml檔案的解析方式改為libxml,而不採用預設的li

基於android2.3.5系統:Andriod與Linux交叉編譯工具[二]

*************************************************************************************************************************** 作者:EasyWave