最近ラズベリーパイを購入しました。私のデスクトップにarm's Crossコンパイラ(amd64)を設定してインストールしました。単純な「hello world」プログラムをコンパイルした後。scp ./hello [email protected]:~/hello
ls -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
にコンパイルされます。
file
32ビット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の実装です。