交叉編譯Ruby傻瓜指南

2021-08-23 13:00:30 字數 1898 閱讀 3415

最近看到有人在交叉編譯ruby的時候似乎碰到了許多問題( )。其實交叉編譯ruby原本應該是很簡單的乙個過程,希望這個「傻瓜指南」可以讓新手也能夠輕而易舉地進行操作。

注 1: 本文以arm-linux為目標平台,其他平台需要調整到對應的工具鏈。

注 2: 本文的編譯平台是linux (debian/ubuntu),如果在cygwin下進行交叉編譯可能會遇到困難。編譯之前請確定bison和flex這兩個程式已安裝好。

交叉編譯ruby-1.8.6:

第1步: 準備

mkdir -p ~/build

mkdir -p ~/bin

cd ~/bin

wget

tar -jxvf arm-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

cd ~/build

wget

tar -jxvf ruby-1.8.6.tar.bz2

第4步: 打補丁

tar -jxvf ruby-configure.patch.tar.bz2

tar -jxvf fakeruby.patch.tar.bz2

cd ruby-1.8.6

patch < ../ruby-configure.patch

patch < ../fakeruby.patch

第5步: 配置

cd ~/build/ruby-1.8.6

export cc=~/bin/arm-2008q3/bin/arm-none-linux-gnueabi-gcc

autoreconf

mkdir -p /opt/arm-linux-ruby

./configure --host=arm-linux --target=arm-linux --disable-pthread --enable-shared --prefix=/opt/arm-linux-ruby 2>&1 | tee config.out

第6步: 編譯,安裝

make 2>&1 | tee make.out

make install 2>&1 | tee install.out

交叉編譯ruby-1.8.7-p72:

1.  首先,要對codesourcery的交叉編譯工具進行乙個小改動:

把本文附件fix-compiler.rb.tar.bz2解開,然後執行:

ruby fix-compiler.rb ~/bin/arm-2008q3/bin
2.  對ruby原始碼打補丁時,除了文中提到的兩個補丁外,還需打上extmk.patch

3.  在配置1.8.7-p72之前,把交叉工具的路徑添入當前路徑:

export path=~/bin/arm-2008q3/bin:$path
其餘步驟和1.8.6版本一樣不再重複。

交叉編譯ruby-1.9.1-p0:

基本步驟與交叉編譯ruby-1.8.7-p71一樣,只是那個extmk.patch不用打了,1.9.1裡面已經修正了這個錯誤。ruby-configure.patch和fakeruby.patch這兩個補丁仍然需要打。真不敢相信, setpgrp (被ruby-configure.patch修正) 和fake-ruby(被fakeruby.patch修正) 這兩個bug從ruby 1.8.2開始就存在,一直到ruby 1.9都還沒被修正

另外還需注意的是,在交叉編譯ruby-1.9之前,編譯機器上必須先安裝ruby-1.9,確保在編譯之前ruby -v輸出是版本1.9。

acknowledgement: 本文採用的'ruby-configure.patch'補丁來自於debian。

編譯 交叉編譯

交叉編譯含義 是指在乙個平台上生成另乙個平台上的可執行 同乙個體系結構可以執行不同的作業系統,同樣乙個作業系統也可以在不同的體系結構上執行 例 常說的x86 linux平台 指inter x86體系結構及linux for x86作業系統 x86 winnt平台 指inter x86體系結構及win...

交叉編譯(2) 交叉編譯鏈

什麼是交叉編譯鏈 明白了什麼是交叉編譯,那我們來看看什麼是交叉編譯鏈。首先編譯過程是按照不同的子功能,依照先後順序組成的乙個複雜的流程,如下圖 那麼編譯過程包括了預處理 編譯 彙編 鏈結等功能。既然有不同的子功能,那每個子功能都是乙個單獨的工具來實現,它們合在一起形成了乙個完整的工具集。同時編譯過程...

交叉編譯 Go 交叉編譯 跨平台編譯

golang 支援交叉編譯,在乙個平台上生成另乙個平台的可執行程式 cgo enabled 0 goos linux goarch amd64 go build main.go cgo enabled 0 goos windows goarch amd64 go build main.go cgo ...