Armadilloフォーラム

gfortranのクロス用パッケージ

nm_2006

2014年12月5日 9時31分

Arnadilloでのクロス用パッケージのインストールについて
質問させて頂きますのでご教授のほどよろしくお願いします。

【やりたいこと】
gfortaranをクロス用として使用したい。

【開発環境】
Armadillo-440
Debian5.0(Lenny)
VMware player 6.0.3
ATDE3

【手順】
①現在のgccバージョン確認→4:4.3.2-2

②gfortranもgccと同じバージョン4:4.3.2-2を使用したいので、
http://archive.debian.net/ja/lenny/devel/gfortran
からダウンロードしました。

③クロス用にパケージを変更する。
$ dpkg-cross --build --arch armel gfortran_4.3.2-2_armel.deb↓
dpkg-cross: package cdebconf doesn't provide any useful files. Skipping.

④ダミーパッケージの作成
$ dpkg-cross --build --arch armel --convert-anyway gfortran_4.3.2-2_armel.deb↓
dpkg-cross: package cdebconf doesn't provide any useful files, but
processing it anyway as requested
Building gfortran-armel-cross_4.3.2-2_all.deb

⑤ダミーパッケージのインストール
#dpkg -i gfortran-armel-cross_4.3.2-2_all.deb↓
(データベースを読み込んでいます...現在87905個のファイルとディレクトリがイン
ストールされています。)

gfortran-armel-cross_4.3.2-2を(gfortran-armel-cross_4.3.2-2_all.debで)置換
するための準備をしています...

gfortran-armel-crossを展開し、置換しています...

gfortran-armel-cross(4.3.2-2)を設定しています...

⑥dpkg -l コマンドで「gfortran-armel-cross」のパッケージが出来ている事を確認。

⑦/usr/arm-linux-gnueabi/lib の下には新規に何も作成されていない。

⑧/usr/bin の下にも新規に何も作成されていない。

⑨パスが通っている事を確認
/usr/Local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

上記の手順でgfortranパッケージのインストールをしましたが、実行コマンドを入力すると
「command not found」が表示されます。

# gfortran-armel-cross↓
command not found 

それで質問です

【質問1】
手順③で、他のバージョンのパッケージ(例えばgfortran-4.3_4.3.2-1.1_armel.deb)は
クロス用に作成されるのですが、gfortran_4.3.2-2_armel.debはなぜ作成出来ないのでしょうか?

【質問2】
手順④ですが、手順③でクロス用に変更を失敗していますので、依存関係とかも考慮しまして、
ダミーパッケージとして作成したものを手順⑤でインストールしましたが、
ダミーパッケージでもインストールしたパッケージは正常に動作するのでしょうか?

【質問3】
手順⑥と⑦の間でなにかの作業が抜けているのでしょうか?

コメント

at_kojiro.yamada

2014年12月8日 19時01分

最終的にやりたいことは、
「fortranで書かれたプログラムを、ATDE上でarmel向けにクロスビルドしたい」
ということでしょうか?

もしそうなのであれば、
armel向けのバイナリを生成するクロスコンパイラのgfortranをビルドする必要があります。

> dpkg-cross --build --arch armel gfortran_4.3.2-2_armel.deb
dpkg-crossはクロスパッケージを作るためのコマンドです。
クロスパッケージとは、特定のアーキテクチャ向け(今回はarmel)のバイナリを別
のアーキテクチャのマシン(今回はi386)にインストールするためのパッケージです。
つまり、この方法で「クロスコンパイラを作ること」はできません。

コメントありがとうございます。

> 最終的にやりたいことは、
> 「fortranで書かれたプログラムを、ATDE上でarmel向けにクロスビルドしたい」
> ということでしょうか?
はい。そうです。

> armel向けのバイナリを生成するクロスコンパイラのgfortranをビルドする必要があります。
「armel向けのバイナリを生成するクロスコンパイラのgfortranをビルドする」というのは、
例えば、gfortran-arm-linux-gnueabiをビルドするということでしょうか?
(gfortran_4.3.2-2_armel.debのパッケージをビルドするのではない)

そのビルドが正常終了した場合、gccのクロス用(arm-linux-gnueabi-gcc)のような
実行ファイル(例えばarm-linux-gnueabi-gfortran)が何処かに作られるのでしょうか?

勉強不足で申し訳ありませんが、よろしくお願いいたします。

> 「armel向けのバイナリを生成するクロスコンパイラのgfortranをビルドする」というのは、
> 例えば、gfortran-arm-linux-gnueabiをビルドするということでしょうか?

そうです。「『x86(ATDE)で動く、arm用のバイナリを吐くクロスコンパイラー』
が入っているパッケージ」という意味で。

> (gfortran_4.3.2-2_armel.debのパッケージをビルドするのではない)

これは、ARM上で実行するためのコンパイラーです。Debianでは各アーキテク
チャ用にコンパイル済のバイナリが入ったパッケージを用意しています。

たとえば、↓で説明しているのは、そのような ARM用にコンパイル済のバイナ
リをx86(ATDE)に再パッケージする方法です。コンパイルしている訳ではなく、
パケージという側だけ作りなおしています。なので中身は、ARM用バイナリで
す。
http://armadillo.atmark-techno.com/howto/install-cross-libraries

もちろん ARM用のバイナリですから、パッケージの中身は x86(ATDE)上で動く
わけではなく、Atmark Distでビルドした時に Armadillo のイメージファイル
に入れられ、Armadillo上で実行される時に使われます。
# 細かい話をすれば、Debianパッケージから取られるのはライブラリだけなの
# ですが、ここでは割愛

gfortran のクロスコンパイラーは、x86で動かなければいけないので、ARM上
で動くコンパイラーを持ってきてもだめです。残念ながら fortranの要望はい
ままで無かったので、提供していません。簡単にコンパイルできるか調べてみ
ますね。

もしクロスコンパイルにこだわりが無ければ、Armadillo に gfortran を入れ
ることで、fortranのコンパイルはできます。こちらの方が、きっと簡単です。
Debian を Armadillo で動かす方法は↓にあります。
http://manual.atmark-techno.com/armadillo-guide/armadillo-guide-2_ja-2…