Raspberry Piでクロスコンパイルされたプログラムを実行すると、「ファイルまたはディレクトリが存在しません」と表示されます。

Raspberry Piでクロスコンパイルされたプログラムを実行すると、「ファイルまたはディレクトリが存在しません」と表示されます。

最近ラズベリーパイを購入しました。私のデスクトップにarm's Crossコンパイラ(amd64)を設定してインストールしました。単純な「hello world」プログラムをコンパイルした後。scp ./hello [email protected]:~/hellols -l hello

-rwxr-xr-x 1 david david 6774 Nov 16 18:08 hello

ただし、実行しようとすると、次の結果が表示されます。

david@raspberry-pi:~$ ./hello
-bash: ./hello: No such file or directory

david@raspberry-pi:~$ file hello
hello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=0x6a926b4968b3e1a2118eeb6e656db3d21c73cf10, not stripped
david@raspberry-pi:~$ ldd hello 
    not a dynamic executable

ベストアンサー1

動的実行可能ファイルではない場合は、無効なターゲット用lddにコンパイルされます。

file32ビットARM実行可能ファイルなので、クロスコンパイルしたようです。ただし、「ARM」アーキテクチャが複数あるため、ツールチェーンが正しく構成されていない可能性があります。

crosstool-NGを使用している場合は、.config値を確認してくださいCT_ARCH_ARCH。 Raspberry Piの場合は、「armv6j」1でなければなりません。または少なくとも私にとってこれはうまくいきます。その他の詳細もありますが、私は考えるこれだけで十分です。残念ながら問題が発生した場合は、もう一度ビルドする必要があります。

IMOがクロスコンパイラツールチェーンを機能させるのは面倒でイライラするかもしれませんが、ホストが大きな要素ではないと仮定すると(そうではありません)、この場合に行うことができます。 Crosstool-ngはTLIコンフィギュレータを使用しているため、複数のビルドを試す必要がある場合は、毎回選択内容を記録してどのように機能するかを確認できます。

1私はarmv7がより一般的なアーキテクチャ(多くの携帯電話など)であると考えているので、一般的なARMクロスコンパイラであると思うものを使用している場合は問題になる可能性があります。数字は混乱しています。たとえば、piのプロセッサは次のようになります。ARM11ただし、このページによれば、ARM11プロセッサフ​​ァミリはARMv6アーキテクチャを使用しています。つまり、ARM11はARMv6の実装です。

おすすめ記事