LoginSignup
4
5

More than 5 years have passed since last update.

Ruby をDebian x86から ARM ABI にクロスコンパイル

Last updated at Posted at 2015-04-13

クロスコンパイルは初心者なのでイケてない方法でコンパイルしてる可能性が高いですが・・・

環境

  • ターゲットの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/

4
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5