WindowsでMobaXtermを使ってlibffiをビルドする

ハマったのでメモ。

やってみる

MobaXtermをインストール

ふつうに公式サイトからダウンロードしてきてインストール

mobaxterm.mobatek.net

必要なパッケージをインストール

こんな感じ? あと何を入れたか覚えてない...

apt-cyg install gcc-core gcc-g++ make

libffiのソースをダウンロード

Githubからでもいいけど、それだとconfigureがないので、公式サイトからダウンロードする。

wget ftp://sourceware.org/pub/libffi/libffi-3.2.1.tar.gz
tar xf libffi-3.2.1.tar.gz && cd libffi-3.2.1

make

ビルドしてみる。

./configure
make

こんなエラーが出る。

/bin/sh ./libtool  --tag=CC   --mode=link gcc  -O3 -fomit-frame-pointer -fstrict-aliasing -ffast-math -march=core2  -Wall -fexceptions   -o libffi_convenience.la  src/prep_cif.lo src/types.lo src/raw_api.lo src/java_raw_api.lo src/closures.lo      src/x86/ffi.lo src/x86/win32.lo
libtool: link: ar cru .libs/libffi_convenience.a src/.libs/prep_cif.o src/.libs/types.o src/.libs/raw_api.o src/.libs/java_raw_api.o src/.libs/closures.o src/x86/.libs/ffi.o src/x86/.libs/win32.o
ar: unknown option -- u
BusyBox v1.22.1 (2014-09-26 07:33:17 CEST) multi-call binary.

Usage: ar [-o] [-v] [-p] [-t] [-x] ARCHIVE FILES

Extract or list FILES from an ar archive

        -o      Preserve original dates
        -p      Extract to stdout
        -t      List
        -x      Extract
        -v      Verbose

Makefile:1168: ターゲット 'libffi_convenience.la' のレシピで失敗しました
make[2]: *** [libffi_convenience.la] エラー 1
make[2]: ディレクトリ '/home/mobaxterm/libffi-3.2.1/i686-pc-cygwin' から出ます
Makefile:1596: ターゲット 'check-recursive' のレシピで失敗しました
make[1]: *** [check-recursive] エラー 1
make[1]: ディレクトリ '/home/mobaxterm/libffi-3.2.1/i686-pc-cygwin' から出ます
Makefile:3097: ターゲット 'check' のレシピで失敗しました
make: *** [check] エラー 2

なんでかなーと思って調べてたら、arコマンドはbinutilsbusyboxで名前がかぶってるコマンドで、busyboxのほうが使われちゃうせいだった。

[user1.pc1]ls -lh /bin/ar
lrwxrwxrwx    1 user1    UsersGrp      16 Nov  7 09:14 /bin/ar -> /bin/busybox.exe

なので、環境変数binutilsの方のarを指定する。

AR=/usr/bin/ar make

無事にビルド成功した。