それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

cygwin向けにLinuxからクロスコンパイル出来るようになりました。

LinuxUbuntu)を使ってCygwin向けのバイナリをクロスコンパイルしました。Cygwinでビルドすると遅いし、CPUファンがうるさいのでサーバー側でコンパイル仕掛けて静か寝られる方がうれしい。何よりLinuxでやった方がCygwinでコンパイルするより3倍以上速い気がする。Cygwinコンパイルは遅い。

準備

sudo aptitude install flex #lexを入れる
sudo aptitude install lib32gmp3-dev # gmp が必要らしい
export PREFIX=/home/takuya/build/cygwin #prefix を決める
mkdir -p $PREFIX 
#cygwin のヘッダファイルとか
wget http://ftp.jaist.ac.jp/pub/cygwin/release/cygwin/cygwin-1.7.8-1.tar.bz2
wget http://ftp.jaist.ac.jp/pub/cygwin/release/mingw-runtime/mingw-runtime-3.18-1.tar.bz2
wget http://ftp.jaist.ac.jp/pub/cygwin/release/w32api/w32api-3.17-1.tar.bz2
tar fjx cygwin-1.7.8-1.tar.bz2 usr/include usr/lib
tar jxf mingw-runtime-3.18-1.tar.bz2
tar jxf w32api-3.17-1.tar.bz2
mv usr/include usr/lib ${PREFIX}/i686-pc-cygwin

binutilsを作る

wget http://core.ring.gr.jp/archives/GNU/binutils/binutils-2.19.1.tar.bz2
tar jxvf binutils-2.19.1.tar.bz2
cd binutils-2.19.1
./configure  --prefix=${PREFIX} --target=i686-pc-cygwin
make 
make install 
export PATH=${PREFIX}/bin:${PATH} #クロスコンパイルのインストール先へパスを通す

ロスコンパイル用のgccを作る

cd ..
wget ftp://ftp.dti.ad.jp/pub/lang/gcc/releases/gcc-4.5.2/gcc-4.5.2.tar.bz2
tar jxf gcc-4.5.2.tar.bz2
cd gcc-4.5.2
mkdir obj-gcc
cd obj-gcc
../configure --target=i686-pc-cygwin\
             --prefix=$PREFIX \
             --with-newlib \
             --enable-languages=c,c++
make #じっと待つ。
make install

出来た!!!

compile してみる

echo "
#include <stdio.h>
int main() {
  printf("hello world\n"); 
}
" > test.c
i686-pc-cygwin-gcc test.c -o test.exe

出来た。動いた。Windowsにファイルを転送してチェックしてみる

Windows側でチェック

takuya@letsnote:~$ cygcheck.exe ./test.exe
C:\Users\takuya\test.exe
  C:\Windows\system32\KERNEL32.dll
    C:\Windows\system32\API-MS-Win-Core-RtlSupport-L1-1-0.dll
    (略)
  C:\Users\Public\apps\cygwin\bin\cygwin1.dll
    (略)

ロスコンパイル出来たよ。

以前やったtreeコマンドを作ってみる

以前Cygwin側でコンパイルしたTreeコマンドを、今度はUbuntuからCygwin向けにコンパイルしてみる。

wget http://tree.sourcearchive.com/downloads/1.5.3-1/tree_1.5.3.orig.tar.gz
tar zxvf tree_1.5.3.orig.tar.gz
cd tree-1.5.3

コメントアウトを解消して・・・

Makefile
> 38 # Uncomment for Cygwin:
> 39 CFLAGS=-O2 -Wall -fomit-frame-pointer -DCYGWIN
> 40 LDFLAGS=-s
> 41 TREE_DEST=tree.exe
> 42 XOBJS=strverscmp.o

ビルドしてみる

make prefix=$PREFIX CC=i686-pc-cygwin-gcc ##cc はMakefile見ながら考えた

あっけないほどに出来た

Cygwin(Windows側)でコマンドを実験してみる

takuya@ubuntu:~$  scp 192.168.2.5:/home/takuya/tree-1.5.3/tree.exe .
takuya@ubuntu:~$  tree 

├── 2011-03-11 PEAR(Windows版)を入れるとエラーになる。.txt
├── 2011-03-11 php syntax エラーが表示されない.txt
├── 2011-03-12 OpenCVインストール.txt
├── COMを探す方法
│&#160;&#160; ├── WS000310.JPG
│&#160;&#160; ├── WS000311.JPG
│&#160;&#160; ├── WS000312.JPG
│&#160;&#160; ├── WS000313.JPG
│&#160;&#160; ├── WS000330.JPG
│&#160;&#160; └── WS000331.JPG

コレもまた簡単に動いた。クロスコンパイル環境は意外と便利ですね。