クロスコンパイルは初心者なのでイケてない方法でコンパイルしてる可能性が高いですが・・・
環境
- ターゲットのruby のバージョンは2.0.0系
- Debian のバージョンは6.0.10 でした
- arm-linux-gnueabiXXX 系のコマンドを先にインストールする必要があります
- 環境は /media/mmc (SDカード配下)で動作するように作成
方針
- なるべく最新をインストール
- 困ったら aptitude show <パッケージ名> でクロスコンパイル環境のdebian にインストールされているバージョンを確認して、そのバージョンに近いバージョンをインストール
- ./configure --help を確認して 利用可能なら --build --host と --prefix を指定 後は色々
コンパイル
前準備
mkdir /media/mmc
mkdir /media/mmc/src
cd /media/mmc/src
ncurses
wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.9.tar.gz
tar zxvf ncurses-5.9.tar.gz
cd ncurses-5.9
./configure --prefix=/media/mmc --host=arm-linux-gnueabi --build=i686-pc-linux-gnu
make
make install
libffi
wget ftp://sourceware.org/pub/libffi/libffi-3.0.13.tar.gz
tar zxvf libffi-3.0.13.tar.gz
cd libffi-3.0.13
./configure --prefix=/media/mmc --host=arm-linux-gnueabi --build=i686-pc-linux-gnu
make
make install
ln -s /media/mmc/lib/libffi-3.0.13/include/* /media/mmc/include
# ↑ヘッダーをリンクしておく
readline
wget ftp://ftp.gnu.org/gnu/readline/readline-6.1.tar.gz
tar zxvf readline-6.1.tar.gz
cd readline-6.1
./configure --prefix=/media/mmc --host=arm-linux-gnueabi --build=i686-pc-linux-gnu
zlib
openssl の前にコンパイルする必要がある
wget http://zlib.net/zlib-1.2.8.tar.gz
CC=arm-linux-gnueabi-gcc LDSHARED="arm-linux-gnueabi-gcc -shared -Wl,-soname,libz.so.1" ./configure --prefix=/media/mmc --shared
make
make prefix=/media/mmc install
openssl
wget https://www.openssl.org/source/openssl-1.0.2a.tar.gz
tar zxvf openssl-1.0.2a.tar.gz
cd openssl-1.0.2a
./Configure --prefix=/media/mmc --openssldir=/media/mmc/etc threads zlib shared no-asm linux-armv4 -I/media/mmc/include -L/media/mmc/lib
export cross=arm-linux-gnueabi-
make CC="${cross}gcc" AR="${cross}ar r" RANLIB="${cross}ranlib"
make CC="${cross}gcc" AR="${cross}ar r" RANLIB="${cross}ranlib" install
libyaml
wget http://pyyaml.org/download/libyaml/yaml-0.1.5.tar.gz
tar zxvf libxml2-2.9.2.tar.gz
cd libxml2-2.9.2
./configure --help
./configure --prefix=/media/mmc --host=arm-linux-gnueabi --build=i686-pc-linux-gnu
make
make install
libxml
wget ftp://xmlsoft.org/libxml2/libxml2-2.7.8.tar.gz
tar zxvf libxml2-2.7.8.tar.gz
cd libxml2-2.7.8
./configure --prefix=/media/mmc --host=arm-linux-gnueabi --build=i686-pc-linux-gnu
make
make install
sqlite
wget https://www.sqlite.org/2015/sqlite-autoconf-3080900.tar.gz
tar zxvf sqlite-autoconf-3080900.tar.gz
cd sqlite-autoconf-3080900
./configure --prefix=/media/mmc --host=arm-linux-gnueabi --build=i686-pc-linux-gnu
make
make install
ruby
確か --with-out-ext
を指定すると標準添付ライブラリもコンパイルしてくれる気がする
wget http://cache.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p643.tar.gz
tar zxvf ruby-2.0.0-p643.tar.gz
cd ruby-2.0.0-p643
CFLAGS="-I/media/mmc/include" LDFLAGS="-Wl,-rpath-link=/media/mmc/lib -L/media/mmc/lib -L/usr/arm-linux-gnueabi/lib" ./configure --prefix=/media/mmc --host=arm-linux-gnueabi --build=i686-pc-linux-gnu --with-baseruby=ruby --disable-install-rdoc --with-out-ext="*dbm,tk,win32ole" --disable-ipv6
make
make install
ruby library version = 2.0.0
configure: creating ./config.status
config.status: creating Makefile
config.status: creating ruby-2.0.pc
configure: WARNING: unrecognized options: --disable-ipv6
--disable-ipv6オプションで警告が出るが無視して良い
追記
rails を使いたかったのだが、gem execjs がnodejs を要求しておりasset pipeline を使うためにはnodejs 等が必要
wget http://nodejs.org/dist/v0.8.9/node-v0.8.9.tar.gz
tar zxvf node-v0.8.9.tar.gz
node-v0.8.9
./configure --without-snapshot --dest-cpu=arm --dest-os=linux
下記のようなエラーが出るのでコメントアウト
'For thumb inter-working we require an architecture which supports blx'
CC="${cross}gcc" CXX="${cross}g++" AR="${cross}ar" LINK="${cross}g++" RANLIB="${cross}ranlib" make install
参考にさせて頂いたサイト
http://blog.kmckk.com/archives/3867590.html
http://www.yoovant.com/how-install-node-js-0-8-arm-based-sbc-fox-board-g20/