現在、ラップトップ (amd64) で作業しながら、BeagleBone (armhf) で SSH 経由でコードをコンパイルできます。
私が今やろうとしているのは、任意の IDE (Code::Blocks、KDevelop、または Qt Creator) を使用してそのコードをデバッグできるようにすることです。
gdbserver
そこで、 BeagleBone で実行して接続することを考えましたが、応答時に予期しない値のエラーが発生します。これについて調べたところ、gdb
処理するには、ローカルで armhf 実行ファイルをビルドする必要があるようです。ただし、amd64 用にビルドされた armhf 指向のものも必要と思われるgdb
ため、 をインストールしてみましたcrossbuild-essential-armhf
。そのために、 で armhf アーキテクチャを追加しましたdpkg --add-architecture armhf
が、apt-get update を実行できません。次のようなエラーが大量に発生します。
Err http://security.ubuntu.com trusty-security/main armhf Packages
404 Not Found [IP: 2001:67c:1562::13 80]
リポジトリを確認すると、確かに armhf はどこにも存在しません。
それで、何が間違っているのでしょうか? また、これは異なるアーキテクチャでリモート デバッグする正しい方法でしょうか、それとももっと良い方法があるのでしょうか?
答え1
Ubuntu は armh 用に別のリポジトリを使用します (つまりhttp://ports.ubuntu.com/
)。crossbuild-essential-armhf を正常にインストールするには、次の手順に従う必要があります。
走る
dpkg --add-architecture armhf
/etc/apt/sources.list
およびのすべての apt deb 行に正しいアーキテクチャを指定します/etc/apt/sources.list.d
。例:deb [arch=amd64,i386] http://archive.ubuntu.com/ubuntu trusty main universe deb [arch=armhf] http://ports.ubuntu.com/ trusty main universe
deb-src行にアーキテクチャを指定しても意味がないことに注意してください。3. 実行apt-get update
4. 実行apt-get install crossbuild-essential-armhf
見てhttps://wiki.debian.org/Multiarch/HOWTO
このガイドで説明されているように、chroot (または docker コンテナ) でこれらのコマンドを実行することもできます。Ubuntu で MultiArch (armel / armhf) を使い始める
答え2
ここでは、Docker ベースのクロスコンパイラの豊富な選択肢があります。
答え3
ビルド ホストの dpkg ソースに armhf を追加する必要はありません。別の方法としては、debootstrap または beagleboard.org イメージを使用して作成できる chroot を使用する方法があります。
VS Code を使用したリモート GDB シンボリック デバッグによる C++ クロスコンパイルの詳細なガイドについては、以下を参照してください。