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】
手順⑥と⑦の間でなにかの作業が抜けているのでしょうか?
コメント
nm_2006
コメントありがとうございます。
> 最終的にやりたいことは、
> 「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)が何処かに作られるのでしょうか?
勉強不足で申し訳ありませんが、よろしくお願いいたします。
at_yashi
> 「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…
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)にインストールするためのパッケージです。
つまり、この方法で「クロスコンパイラを作ること」はできません。