
Ubuntu日本語フォーラム

ログインしていません。
arm-linux-gnueabi-gcc等を用いてx86上でmozcの最新版をarmel向けにコンパイルしています。
(はじめNetWalkerでコンパイルしていたのですが、途中で謎のエラーが発生し、Killedとなって終了してしまいました。)
依存ライブラリはapt-crossを用いてダウンロード・インストールし、「/usr/arm-linux-gnueabi/lib」に入れました。
また、/usr/bin内のgcc、g++、ar、ranlibを一旦別の場所に移動し、arm-linux-gnueabi-gccなどへのシンボリックリンクにしました。
(makefile等でgccを呼び出そうとすると、クロスコンパイラが呼び出される寸法です。)
そして、いざコンパイルしようと、dpkg-buildpackage -uc -bしたところ、途中で以下のようなエラーが複数発生してしまいました。
/usr/lib/gcc/arm-linux-gnueabi/4.4.4/../../../../arm-linux-gnueabi/bin/ld: warning: libidn.so.11, needed by /usr/arm-linux-gnueabi/lib/libcurl.so, not found (try using -rpath or -rpath-link)
しかし、確認したところ「/usr/arm-linux-gnueabi/lib/」内に「libidn.so.11」とそのリンク先「libidn.so.11.6.1」は入っています。
-rpathや-rpath-linkは、makefileが動的に生成されるので、簡単には追加できそうにありません。
どのような訳で見つからないと言われてしまったのか、また、解決策があればお願いします。
オフライン
要約すると、x86環境上でnetwalkerのクロスコンパイル環境を作成するということでしょうか。
私もnetwalker用にクロスコンパイル環境を作成したことがあります。(私はemdebianのツールチェインを使用しました)
vbk による投稿:
依存ライブラリはapt-crossを用いてダウンロード・インストールし、「/usr/arm-linux-gnueabi/lib」に入れました。
また、/usr/bin内のgcc、g++、ar、ranlibを一旦別の場所に移動し、arm-linux-gnueabi-gccなどへのシンボリックリンクにしました。
(makefile等でgccを呼び出そうとすると、クロスコンパイラが呼び出される寸法です。)
これって/libの依存関係をズタズタにしてしまいませんか?ldconfigなどで対応できるのかもしれませんが、上記の要求だけでしたら
ARM用コンパイラをインストールして、Makefileに以下の記述で十分対応できる気がするんですがどうでしょうか。
CROSS_COMPILE = arm-linux-gnueabi- CC := $(CROSS_COMPILE)gcc CXX := $(CROSS_COMPILE)g++ AR := $(CROSS_COMPILE)ar -r
オフライン
お返事ありがとうございます。
Mozcのビルドスクリプトのそれらしい箇所をkmzさんのおっしゃるように変更してみたんですけど、自動生成されるMakefileが変更前と変わらなかったため、仕方なくgccなどをリンクで置き換える方法を取りました。
依存関係は大丈夫と思われます。apt-crossによる変換後のパッケージ名は最後に「-arm-cross」が追加されてますし、インストール先自体が/usr/arm-linux-gnueabi/libなど、本来のx86環境とは切り離されるようになってます。
以下のページを参考にしました。
https://sites.google.com/a/oidon.net/www/linux/arm-cross-tool-chain
バージョンが違うからなのか、debianだからなのか分かりませんが、apt-crossが依存関係を無視してインストールするなど、結構面倒な目にあったことや、いろいろ試行錯誤しているうちに、ld関係で更に不明なエラーが発生したことなどあったので、中断します。
ARMのクロス環境についていろいろ議論されているようなので、機会があれば試してみようと思います。
https://blueprints.launchpad.net/ubuntu/+spec/arm-m-cross-compilers/
オフライン
vbkさん
私も同じサイトを参考にしました。私の場合は一番上のツールチェインですね。
参考までに私のクロスコンパイル環境は以下の通りでした。
HOST : MacBook(Intel) - ubuntu 9.10
TARGET : Netwalker
行った作業 : netwalkerのkernelと自前のアプリケーションをクロスコンパイルしてインストール
vbk による投稿:
Mozcのビルドスクリプトのそれらしい箇所をkmzさんのおっしゃるように変更してみたんですけど、自動生成されるMakefileが変更前と変わらなかったため、仕方なくgccなどをリンクで置き換える方法を取りました。
依存関係は大丈夫と思われます。apt-crossによる変換後のパッケージ名は最後に「-arm-cross」が追加されてますし、インストール先自体が/usr/arm-linux-gnueabi/libなど、本来のx86環境とは切り離されるようになってます。
と、いうことはdpkg-buildpackageの時点で、環境変数が変わってないとダメなんですよね。
dpkg-buildpackageは使用したことが無いのですが、"-a"のアーキテクチャの指定オプションがありますね。こちらは試されましたでしょうか。
あとはexportでCCやARを書き換えてもダメですかね?
vbk による投稿:
ARMのクロス環境についていろいろ議論されているようなので、機会があれば試してみようと思います。
https://blueprints.launchpad.net/ubuntu/+spec/arm-m-cross-compilers/
リンク拝見しました。ちょっと先が長そうですね。。。
オフライン
環境変数は変えましたが、はじめから変えたのか、前述のエラーが発生してから変えたのかは覚えていません。。環境を削除してしまった今となってはどのように変更したかも定かではないですが...。
(エラーメッセージの途中に"needed by /usr/arm-linux-gnueabi/lib/libcurl.so"とあるので、一部のarmel用ライブラリは読み込めていたと思います。しかし、同一のディレクトリにあるlibidn.so.11が読み込めないと言われました。)
当時-aオプションも試してみましたが、状況は変化しませんでした。おそらくパッケージングの方法を変えるだけで、コンパイルとは無関係な気がします。
NetWalkerでエラーが発生するのはメモリ不足が原因なのでしょうか。compcacheで100MB程度swapを追加してもエラーが発生したんですけど。
QEMUでも試してみましたが、メモリサイズ256Mの限度があるからか、コンパイル中にSegmentation faultとなってQEMU自体が強制終了してしまいました。
オフライン