Ubuntu 12.04 i386ホストでUbuntu 12.04 armhfアーキテクチャ向けにアプリケーションをクロスコンパイルするにはどうすればよいですか?


16

私が書いた大きなアプリケーションがあります。次のシナリオでアプリケーションを正常にコンパイルできます。

  • Ubuntu 12.04を実行しているi386ホストのネイティブコンパイル
  • Ubuntu 12.04を実行しているPandaBoardでネイティブ(これには長い時間がかかります)
  • armhf PandaBoardターゲットのホストPCでQemuとchrootを使用(これには非常に長い時間がかかります)

i386ホスト上のアプリケーションをクロスコンパイルして、PandaBoardなどのターゲットで実行し、タイムリーにビルドを完了したいと思います。これまでのところ、リポジトリでarm-linux-gnueabihfツールチェーンを使用する試みは、正しく実行されないバイナリを生成しました。この段階では、ソフトウェアをパッケージ化する予定はありません。

クロスコンパイルを成功させるための推奨される方法は何ですか?


クロスコンパイラツールチェーンを使用したクロスコンパイルが機能するはずです。それが目的です。バイナリはどのように正しく動作しませんか?
ジル「SO-悪であるのをやめる」

私のバイナリはほとんどすぐに終了します。straceは、libc.so.6が期待される場所ではないことを示しているようです。
ジョナサン洞窟

それはリンクオプションによって修正できるはずです(どれがオフハンドかはわかりません)。ターゲットシステムはUbuntuを実行していますか?
ジル「SO-悪であるのをやめる」

はい、ターゲットもUbuntu 12.04を実行しています。コンパイラとリンカーに--sysrootオプションを使用する必要があるかもしれないと思っていましたが、これはUbuntuツールチェーンでは無効になっています。
ジョナサン洞窟

ツールチェーンは、12.04にちょうど機能します。私はちょうどamd64でそれをテストし、それがarmhfサーバーで作成したバイナリを正常に実行しました。しかし、i386ビルドマシンは手元にありません。それでも問題が解決しない場合は、詳しく説明する必要があります。lddは何と言っていますか?あなたはあなたの結論に至ったstraceから何を見ましたか?問題を明確に機能する単純なテストケースに縮小できるかどうかを確認し、実行している手順を詳細に説明します。
ロビーバサック

回答:


6

https://wiki.linaro.org/Platform/DevPlatform/CrossCompile/UsingMultiArch

https://wiki.ubuntu.com/MultiarchCross

Ubuntuにはクロスツールチェーンapt-get install gcc-arm-linux-gnueabihfがありますが、次の世代のツールチェーンでの作業については、http://gsoc.sitedethib.com/posts/apt-get_install_gcc-4.7-arm-linux-gnueabihf/で説明しています。

この時点で必要な回避策がいくつかあります。たとえば、間接リンク(linaro wikiページで説明されています)を使用する場合は、コンパイルした直後に外部バイナリを実行することも避けてください。

また、autotoolsで最も成熟しています。

パッケージをクロスコンパイルできるようになりました。

apt-get build-dep -aarmhf foo-pkg
apt-get source foo-pkg
cd foo-pkg-*
dpkg-buildpackage -aarmhf

3
これらのステップが何をするのか、-aarmhfスイッチが何であるのかを説明してください。彼らは多くのユーザーには馴染みがなく、有用な答えを得るためにさらに別のレイヤーを検索する必要があります。ありがとう。
garyp
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.