• ベストアンサー

クロスコンパイルの正しい概念

玄箱のクロスコンパイル環境を作ろうと思っています。 そもそも、クロスコンパイルとは ・玄箱でまともにコンパイルすると非常に時間がかかるし、容量も少ないので別のPC側でコンパイルを行う。 くらいしか思っていません。あっていますか? クロスコンパイル環境構築の前提条件のところで悩んでいまして、 ・gccさえ同じであればいいのか? ・同じカーネル(バージョン)でなくてはならないか? ・同じOSでなければいけないか? どうなのでしょう? また、実際の手順は 1) 別のマシンでソースからconfigure, make , make install 2) installしたprefixから配下をそのままごそっと玄箱へコピー 3) あとは普通にコマンド実行 という感じで思っています?あっていますか? 参考になるページなどありましたらあわせてお願いします。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • entree
  • ベストアンサー率55% (405/735)
回答No.3

> ・gccさえ同じであればいいのか? > ・同じカーネル(バージョン)でなくてはならないか? > ・同じOSでなければいけないか? クロスコンパイルと言うからには、hostとtargetは同じ OS でなくても構いません。host : linux、target = mingw (windows) なんてのもありです。 gcc は host-cc と同じバージョンであった方がよいでしょう。 binutils は違っていても構いません。 ※gas と ld のどちらかが target をサポートしない場合 (HP-UX など) は格段に敷居が高くなります。(できないわけではありません) > 1) 別のマシンでソースからconfigure, make , make install > 2) installしたprefixから配下をそのままごそっと玄箱へコピー > 3) あとは普通にコマンド実行 間違っていません。prefix はくれぐれもシステムディレクトリ (/usr、/usr/localなど) を指さないようにしてください。

goroneko-begin
質問者

お礼

ご返答ありがとうございます。 ですがgas・ldとは何でしょう?? 基本的に考え方は間違っていないようなので挑戦してみます。 targetはubuntu hostはwin(Cygwin) で考えています。

その他の回答 (2)

noname#29459
noname#29459
回答No.2

環境とは、 1)target用のコードを吐けるクロスコンパイラなどツールチェイン 2)target用のヘッダー 3)target用のライブラリ(static linkingするなら) 4)target用のビルドスクリプト、makefile が必要です。  target環境へのインストールは、targetごとの流儀があるでしょう。  hostのOSは、理論的には、関係ないです。

goroneko-begin
質問者

お礼

ありがとうございます。 色々と試してみます。

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

クロスコンパイルというのは「自プラットフォームとは別の環境向けのコンパイル」以上の意味を持ちません。 クロスコンパイルする「理由」の方はいくつかありますが、組み込みなら「自分でコンパイル環境を持てない」からクロスコンパイルしますし、本件のように「実環境でするより早い」というのも理由の一つですね。 前提条件としては ・関連ライブラリ(とりあえずglibcか)のバージョンが一緒 だけのはずです。 ホストのカーネル・OSは一切関係ありません。 gccのバージョンもマイナーバージョン程度ならglibcで吸収するはずですが、新しい方には駄目かも。 手順はだいたいそんな感じでいいはずです。

goroneko-begin
質問者

お礼

関連ライブラリ(とりあえずglibcか) ですよね。そのアプリが関連ライブラリを使っているのかどうかreadmeを精読しなければわからないということですよね。 ありがとうございます。